【C++】拷贝构造函数
(一)拷贝构造函数
同一个类的对象在内存中拥有相同的结构,若作为整体拷贝是可以的。但我们知道,同一个类的方法是所有该类的对象共用的。所以只需要拷贝数据成员。拷贝构造函数的功能就是专门拷贝数据成员的函数。
拷贝构造函数的作用:当使用一个成员对象初始化一个对象时,会调用该函数来构造对象
(二)浅拷贝的问题
- 当析构使用缺省的拷贝构造函数(浅拷贝)构造的对象和被拷贝的对象时(有堆区空间),在两次delete时,由于是浅拷贝,所以两次delete的空间地址是同一块内存地址,程序会崩溃。
(三)解决方案
(1)深拷贝的拷贝构造函数
1 | class Object |
(2)引用计数技术
1 | class Object |
(四)总结
- 拷贝构造函数的参数
一定要使用引用
(值传递会造成无限递归,因值传递生成临时对象需要调用拷贝构造函数…) - 当没有显示指定该类的拷贝构造函数时,编译器提供缺省的拷贝构造函数(浅拷贝)
形如:
1 | class Object |
- 当函数的返回值是类的对象,返回的对象其实是一个通过拷贝构造函数构造的临时对象。(函数返回结束,函数栈帧回收,栈帧中的对象已无效),所以在返回之前会调用拷贝构造函数生成临时对象并返回。当该句函数调用完成,该临时对象会被析构。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 code-016!