c++代码实现深拷贝和浅拷贝的区别
时间: 2024-06-16 12:07:38 浏览: 107
在C++中,深拷贝和浅拷贝是两种不同的对象拷贝方式,它们的区别在于拷贝后对象的内存管理方式不同。
浅拷贝是指将一个对象的值复制到另一个对象,包括对象中的成员变量。在浅拷贝中,两个对象将共享同一块内存空间,当其中一个对象修改了共享的资源时,另一个对象也会受到影响。这是因为浅拷贝只是简单地复制了指针,而没有复制指针所指向的内容。
深拷贝是指创建一个新的对象,并将原始对象中的值复制到新对象中。在深拷贝中,两个对象拥有独立的内存空间,彼此之间互不影响。深拷贝会递归地复制指针所指向的内容,确保每个对象都有自己的独立资源。
下面是C++代码实现深拷贝和浅拷贝的示例:
```cpp
#include <iostream>
class MyClass {
public:
int* data;
// 默认构造函数
MyClass() {
data = new int(0);
}
// 拷贝构造函数(浅拷贝)
MyClass(const MyClass& other) {
data = other.data;
}
// 拷贝构造函数(深拷贝)
MyClass(const MyClass& other) {
data = new int(*other.data);
}
// 析构函数
~MyClass() {
delete data;
}
};
int main() {
MyClass obj1;
*obj1.data = 10;
// 浅拷贝
MyClass obj2 = obj1;
std::cout << *obj2.data << std::endl; // 输出:10
// 修改obj1的值
*obj1.data = 20;
std::cout << *obj2.data << std::endl; // 输出:20(受到影响)
// 深拷贝
MyClass obj3(obj1);
std::cout << *obj3.data << std::endl; // 输出:20(不受影响)
return 0;
}
```
阅读全文