这几个概念比较容易混淆,总结一下。
同默认构造函数一样,当我们没有定义复制构造函数时,编译器会合成一个默认的复制构造函数。合成的复制构造函数只是满足编译器的需求,把新对象的每个成员变量初始化为原对象的副本,通常是大家所说的浅拷贝。一般来说合成的复制构造函数能满足我们的需求,但是包含有指针的类一般情况下需要定义自己的复制构造函数。
关于深拷贝浅拷贝可参考:Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
至于有指针的类为什么需要复制构造函数可参考:C++中的智能指针
有时候我们禁止对象的复制,这时只需要把复制构造函数声明为PRivate。
新闻热点
疑难解答