C++ 深拷贝与浅拷贝

来源:互联网 发布:痔疮手术 知乎 编辑:程序博客网 时间:2024/06/05 08:52

浅拷贝:没有自定义的拷贝构造函数,使用的是C++编译器自动产生的一个默认构造函数,默认的构造函数采用的是“位拷贝”,也就是浅拷贝,并不是“值拷贝”,也就是深拷贝。定义一个类 A,有A obj1;  不自定义拷贝构造函数时,即 A obj2(obj1) 或 A obj2 = obj1;  浅拷贝使得obj1和obj2指向同一块内存,调用析构函数时,要对同一个资源析构2次,即对同一块内存释放2次,这是错误的,如果对象中存在动态成员,即指针,在析构时会造成内存泄露,并且由于指向同一块内存,任何一方的变动都会影响到另一方。

深拷贝:防止编译器形成默认的构造函数,自定义拷贝构造函数,拷贝构造函数为成员变量申请了新的内存空间,obj1和obj2不再指向同一块内存。

我们来看下具体的简单实例吧。


0 0
原创粉丝点击