如果拥有默认副本构造函数,为什么要使用手动副本构造函数?默认副本和手动创建的副本构造函数之间有什么区别?请给一个简单的C ++编码示例,这样我就可以轻松快速地理解。我们可以编写多个副本构造函数吗?
答案 0 :(得分:1)
如果拥有默认副本构造函数,为什么要使用手动副本构造函数?默认和手动创建的副本构造函数有什么区别?
默认复制构造函数执行浅表复制,在需要进行深度复制时定义复制构造器。
例如,如果您的类中有一个指针并在构造函数中动态分配内存,则在这种情况下,您应显式提供复制构造函数以进行指针内容的深层复制,否则默认的复制构造函数将复制指针本身,其中大部分不想做的时间。
我们可以编写多个副本构造函数吗?
Copy构造函数具有标准签名,因此不能重载。复制构造函数不能再有那么多了。
答案 1 :(得分:0)
复制对象是什么意思?如何回答这个问题并不总是很明显,所以编译器不能总是知道,您必须告诉它如何复制。
一个简单的例子:
struct Foo {
int* some_val; // raw pointer only for the sake of the example !!
};
默认副本将仅复制成员。这是你想要的吗?
在复制Foo
之后,该副本应具有some_val
指向同一实例(浅副本),还是应复制Foo
副本,复制{{所指向的值1}}(深拷贝)?
如果使用编译器生成的副本,则将获得第一个副本。如果您还需要其他内容,则需要提供自己的定义,以复制some_val
。