c++中类的浅拷贝和深拷贝
时间: 2024-11-22 22:29:33 浏览: 8
C++类对象的深拷贝、浅拷贝构造函数.doc
3星 · 编辑精心推荐
在C++中,浅拷贝和深拷贝主要涉及对象之间的复制行为,特别是当对象内部包含指针或其他复杂数据结构时。浅拷贝通常是指对指针进行逐元素复制,而不会复制它们所指向的对象;深拷贝则是完整地复制整个对象,包括其内部的所有数据。
**浅拷贝示例(错误的做法)**:
```cpp
class ShallowCopyExample {
public:
int* data; // 原始数据
// 错误的浅拷贝构造函数(仅复制指针)
ShallowCopyExample(const ShallowCopyExample& other)
: data(other.data) {} // 只复制了指针,未复制数据
// 其他成员可能...
};
// 这里,如果其他对象的数据被修改,浅拷贝后的对象也会受到影响
ShallowCopyExample copy_of_original;
original.data = new int[10]; // 修改原始对象
copy_of_original; // 意外修改了浅拷贝的data
```
**深拷贝示例(正确做法)**:
```cpp
// 正确的深拷贝构造函数(复制整个对象)
class DeepCopyExample {
public:
int* data;
DeepCopyExample(int size) { data = new int[size]; }
// 深度复制构造函数
DeepCopyExample(const DeepCopyExample& other) {
data = new int[other.size];
std::copy(other.data, other.data + other.size, data);
}
~DeepCopyExample() { delete[] data; }
};
// 此时,即使原对象数据改变,拷贝对象仍保持独立
DeepCopyExample copy_of_original(original);
original.data = new int[20]; // 原始对象变化不影响拷贝
```
阅读全文