c++深拷贝实例代码
时间: 2024-08-30 14:00:31 浏览: 40
C++实现String类实例代码
在 C++ 中,深拷贝是指创建一个新的对象并完全复制其数据成员,包括所有嵌套对象。通常发生在需要防止原始对象被修改的情况下。下面是一个简单的深拷贝实例,使用了引用计数法:
```cpp
#include <iostream>
using namespace std;
class MyClass {
public:
int value;
MyClass* nestedObject; // 指向其他 MyClass 的指针
// 构造函数
MyClass(int val = 0, MyClass* obj = nullptr) : value(val), nestedObject(obj) {}
// 深拷贝构造函数
MyClass(const MyClass& other) : value(other.value), nestedObject(new MyClass(*other.nestedObject)) {
// 如果嵌套对象是非空指针,就需要递归地深拷贝它
if (nestedObject)
*nestedObject = *other.nestedObject;
}
// 拷贝赋值运算符 (浅拷贝)
MyClass& operator=(const MyClass& other) {
if (this != &other) {
value = other.value;
delete nestedObject; // 先删除旧的对象
nestedObject = new MyClass(*other.nestedObject); // 再做深拷贝
}
return *this;
}
~MyClass() { //析构函数释放内存
delete nestedObject;
}
};
int main() {
MyClass a(5);
MyClass b(a); // 这里使用的是深拷贝构造函数
a.nestedObject = new MyClass(10);
// 现在,b有独立的 copy of a 的值以及嵌套对象
cout << "a.value: " << a.value << endl;
cout << "b.value: " << b.value << endl;
return 0;
}
```
在这个例子中,当你将 `a` 的副本赋给 `b` 时,不仅 `value` 被复制,`nestedObject` 也进行了深拷贝。如果 `a` 或 `b` 发生变化,不会影响到对方。
阅读全文