C++深拷贝和浅拷贝(位拷贝)

在对象拷贝过程中,如果没有自定义拷贝构造函数,系统会提供一个缺省的拷贝构造函数,缺省的拷贝构造函数对于基本类型的成员变量,按字节复制,对于类类型成员变量,调用其相应类型的拷贝构造函数。

阅读《高质量的c c++编程》,第9章有这样一段话,类似的话在《c++primer》《effective C++》都有所提及,那就是拷贝构造函数问题,这个是类编写者的一个基础问题。

在这里插入图片描述

在这里插入图片描述

位拷贝(浅拷贝)举例,a指向b,b的改变其实会影响a的改变,同时a原本指向的空间发生泄漏。

然后这种情况下有了深拷贝。

何时调用?

以下情况都会调用拷贝构造函数:
一个对象以值传递的方式传入函数体
一个对象以值传递的方式从函数返回
一个对象需要通过另外一个对象进行初始化。

浅拷贝:位拷贝,拷贝构造函数,赋值重载。 多个对象共用同一块资源,同一块资源释放多次,崩溃或者内存泄漏

深拷贝:每个对象共同拥有自己的资源,必须显式提供拷贝构造函数和赋值运算符。

缺省拷贝构造函数在拷贝过程中是按字节复制的,对于指针型成员变量只复制指针本身,而不复制指针所指向的目标–浅拷贝。

发布了106 篇原创文章 · 获赞 269 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_32642107/article/details/104701497