C++中如何进行深拷贝对象,举例说明?
时间: 2024-09-08 08:04:21 浏览: 54
C++中的深拷贝与浅拷贝问题
在C++中,深拷贝通常通过拷贝构造函数和赋值运算符(`copy constructor` 和 `operator=`)实现。这里以一个包含复杂成员(例如指向另一个对象的指针)的自定义类为例:
```cpp
class MyClass {
public:
// 原始对象
std::unique_ptr<MyOtherClass> ptr;
// 拷贝构造函数
MyClass(const MyClass& other) : ptr(other.ptr ? new MyOtherClass(*other.ptr) : nullptr) {}
// 赋值运算符
MyClass& operator=(const MyClass& other) {
if (this != &other) {
if (ptr) {
ptr->~MyOtherClass(); // 释放旧对象
}
ptr = other.ptr ? new MyOtherClass(*other.ptr) : nullptr;
}
return *this;
}
};
```
在这个例子中,`std::unique_ptr` 是一种智能指针,用于管理内存。当进行深拷贝时,不仅复制了指针本身的引用,还创建了一个新的`MyOtherClass`实例,确保新对象不会受到原对象生命周期影响。
注意,上述代码中的`~MyOtherClass()`是析构函数的反操作,它用于在复制前释放原始对象的资源。这样可以避免内存泄漏。
阅读全文