递归函数实现深拷贝代码
时间: 2024-06-21 16:02:52 浏览: 161
递归函数实现深拷贝通常在处理复杂数据结构,如树或图等,其中包含嵌套的数据结构时非常有用。深拷贝确保了新创建的对象与原对象完全独立,即使它们的初始值相同,修改一个也不会影响另一个。以下是一个使用C++的例子,展示如何用递归函数实现深拷贝:
```cpp
#include <iostream>
#include <vector>
using namespace std;
class MyClass {
public:
vector<MyClass*> children;
// ...其他成员变量
// 如果有复制构造函数,也需要重载
MyClass(const MyClass& obj) : children(obj.children.size()) {
for (size_t i = 0; i < obj.children.size(); ++i) {
children[i] = new MyClass(*obj.children[i]);
}
}
// 递归实现深拷贝的复制构造函数
MyClass(MyClass&& obj) noexcept : children(obj.children.begin(), obj.children.end()) {
for (MyClass* child : children) {
if (child) {
child->~MyClass(); // 确保释放原始对象的内存
child = nullptr; // 防止对象被意外引用
}
}
}
// 重载赋值操作符,同样进行深拷贝
MyClass& operator=(const MyClass& obj) {
if (this != &obj) {
delete[] this->children; // 清空旧数组
children.clear();
children.resize(obj.children.size());
for (size_t i = 0; i < obj.children.size(); ++i) {
children[i] = new MyClass(*obj.children[i]);
}
}
return *this;
}
};
// 示例使用
int main() {
MyClass obj1;
MyClass obj2(obj1); // 深拷贝构造函数自动调用
obj1.children.push_back(new MyClass()); // 修改obj1的子对象
// 此时obj2的children仍然是未修改前的状态,因为它们是独立的
return 0;
}
```
阅读全文