1
15
首先,确保您确实需要支持copy。大多数时候情况并非如此,因此禁用这两种方法是可行的。 有时,您仍然需要从多态层次结构中提供类上的重复,在这种情况下:禁用赋值运算符,写一个(受保护的?)复制构造函数,并提供一个虚拟clone()函数。 否则,在编写一个值类的情况下,您将回到共有权的正交规范形式。如果您有一个不能被简单复制的成员,那么您需要提供一个复制构造函数、一个析构函数、一个赋值运算符和一个默认的构造函数。可以对该规则进行优化,例如请参见: The Law of The Big Two 我也建议你看看 C++ FAQ regarding assignment operators 在 copy-and-swap idiom 及AT GOTW . |
2
4
编译器生成的版本在大多数情况下都可以工作。 当您的对象包含一个原始指针(一个没有原始指针的参数)时,您需要更仔细地考虑这个问题。所以您有一个原始指针,第二个问题是您是否拥有该指针(它是否被您删除)?如果是这样,那么您需要应用4规则。 拥有一个以上的原始指针变得越来越难正确执行(复杂度的增加也不是线性的[但这是观测性的,我没有真实的统计数据来支持该声明])。因此,如果您有一个以上的原始指针,请考虑将每个指针包装在自己的类中(某种形式的智能指针)。 规则4:如果对象是原始指针的所有者,则需要定义以下4个成员以确保正确处理内存管理:
如何定义这些将取决于具体情况。但要注意的是:
|
3
1
|
4
-2
我不知道这里有什么例外,但我走这条路。假设它是一个模板化数组包装器。希望有帮助:)
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |