Categories: C++程序踩坑记录

C++-开发需额外操作如深拷贝时的小技巧

内容目录

假设现在在开发一个 Array 容器,而没有完全开发完,想暂时用一用。
然后把 Array容器在某个类中定义为了成员变量。此时对这个类进行实例化 AB
当使用 A = B 的时候,会调用此类的复制赋值运算符,而如果没有重写任何一个管理生命周期的函数的时候,此复制赋值运算符是默认行为。
也就是对每个成员变量调用复制赋值运算符,而 Array 的实例化在此类中,所以 Array 会被调用默认复制赋值运算符。
而众所周知,Array 需要额外的空间托管内存,所以复制赋值运算符只能复制成员变量或者指针等需要浅拷贝的东西。
如果这时候没有实现 复制赋值运算符 的话,会导致 Array 仅对成员变量进行拷贝,此时两个 Array 同时托管了同一个内存区域。
这时候就容易发生报错,并且逻辑是通畅的有时候很难追根溯源。

那么在没有完全开发完的时候,则需要对没有提供具体实现的函数显式的 = delete。
这时没有实现的函数会在编译期报错,就可以很方便的找到哪里的函数没有被实现,从而避免一些比较难找到的问题。

Array(const Array& NewArray) = delete; // 复制构造函数
Array(Array&& NewArray) = delete; // 移动构造函数
Array& operator= (const Array& NewArray) = delete; // 复制赋值运算符
Array& operator= (Array&& NewArray) = delete; // 移动赋值运算符

此时,没有被实现的生命周期函数会因为找不到实现而在编译时报错,这样有助于更好的找到问题所在。

同步Sch

Recent Posts

UE-Rider 无法解析 SDK 解决方案

无法解析 SDK“Micros…

5 天 ago

杂项 – 关于Ascii字符画生成相关网站

网站 如果想实现这样的注释效果…

2 周 ago

C++-分数泛型模板类实现

前言 在引擎库中,有时候可能会…

3 周 ago

C++-HashMap 数据结构的实现

前要说明 HashMap 是一…

1 月 ago

杂项 – Markdown

跳转到 Markdown – …

1 月 ago

杂谈-我都玩过什么游戏

在面试的过程中,我发现游戏公司…

3 月 ago