为什么要声明副本构造函数?

时间:2019-06-24 07:44:16

标签: c++ constructor

为什么建议您显式声明一个副本构造函数,即使当编译器使用对象作为参数,使用对象作为返回值,甚至基于同一类的另一个对象构造一个公共副本构造函数时?

2 个答案:

答案 0 :(得分:0)

当对象具有动态内存分配时,需要复制构造函数。 默认情况下,c ++编译器会创建副本构造函数,因此当您没有指针等时,不需要定义副本构造函数。

答案 1 :(得分:0)

  

为什么即使编译器创建了公共副本构造函数,也建议您显式声明一个副本构造函数

不是。

如果您没有在复制构造函数中执行的特殊逻辑,则无需提供任何逻辑,而这仅仅是噪音。

如果这样做,那么显然您必须通过提供自己的副本构造函数来编写该代码。


一些较旧的文本可能会建议您声明 all 个特殊成员函数,即使它们的定义为空,因为如果以后要添加有意义的定义,则不要更改包含以下内容的标头:班级。这有助于减少使用您的代码的重建时间和与项目的兼容性问题。

但是,如果发生这种情况,几乎可以肯定是因为您修改或添加了一些数据成员,所以无论如何都必须修改标头。而且,坦率地说,对类的语义进行如此重大的更改仍需要引起我们的注意。我不认为使代码尽可能冗长只是为了进行不完全透明,透明的更改。