c++深拷贝构造函数
时间: 2023-11-03 18:54:44 浏览: 107
详解C++ 拷贝构造函数
5星 · 资源好评率100%
C++中的深拷贝构造函数是用于创建一个新对象并复制另一个对象的所有成员变量的构造函数。它通常用于创建对象的副本,确保两个对象在内存中是完全独立的。
下面是一个示例代码,展示了如何实现深拷贝构造函数:
```cpp
#include <iostream>
#include <cstring>
class MyClass {
public:
int* data;
// 默认构造函数
MyClass() {
data = new int;
*data = 0;
}
// 深拷贝构造函数
MyClass(const MyClass& other) {
data = new int;
*data = *other.data;
}
// 析构函数
~MyClass() {
delete data;
}
};
int main() {
// 创建对象 obj1
MyClass obj1;
std::cout << "obj1.data: " << *obj1.data << std::endl;
// 使用深拷贝构造函数创建对象 obj2,并将 obj1 的值复制给 obj2
MyClass obj2(obj1);
std::cout << "obj2.data: " << *obj2.data << std::endl;
// 修改 obj2 的值
*obj2.data = 10;
// 验证 obj1 和 obj2 的值是否相互独立
std::cout << "obj1.data: " << *obj1.data << std::endl; // 0
std::cout << "obj2.data: " << *obj2.data << std::endl; // 10
return 0;
}
```
在上面的示例中,我们定义了一个名为 `MyClass` 的类,其中包含一个成员变量 `data`,它是一个指向 int 类型的指针。我们通过深拷贝构造函数,使用 `new` 操作符为 `data` 成员变量分配了内存,并将源对象的值复制到新对象中。
需要注意的是,在深拷贝构造函数中,我们需要手动分配内存,并将源对象的数据复制到新分配的内存中。这样可以确保新对象和源对象具有相同的值,但是它们在内存中是独立的。
希望以上解答能对你有所帮助!如有更多问题,请继续提问。
阅读全文