深拷贝
深拷贝是指在复制对象时,不仅复制对象的所有成员变量的值,还复制成员变量指针或引用所指向的实际数据。这意味着原对象和拷贝对象拥有独立的底层数据,互不影响。
#include <iostream>
class Person {
public:
int* age;
// 构造函数
Person(int a) {
age = new int(a);
}
// 拷贝构造函数(深拷贝)
Person(const Person& other) {
age = new int(*(other.age));
}
// 打印年龄
void printAge() const {
std::cout << "Age: " << *age << std::endl;
}
// 析构函数
~Person() {
delete age;
}
};
int main() {
Person person1(25);
Person person2 = person1; // 深拷贝
person1.printAge(); // 输出:Age: 25
person2.printAge(); // 输出:Age: 25
// 修改person1的年龄
*(person1.age) = 30;
person1.printAge(); // 输出:Age: 30
person2.printAge(); // 输出:Age: 25(独立的数据)
return 0;
}
在这个示例中,person2
是通过深拷贝 person1
创建的。修改 person1
的年龄不会影响 person2
,因为它们有各自独立的 age
数据。
总结:
- 浅拷贝:只复制对象的成员变量值(包括指针或引用),导致原对象和拷贝对象共享相同的底层数据。
- 深拷贝:不仅复制对象的成员变量值,还复制成员变量指针或引用所指向的实际数据,使得原对象和拷贝对象拥有独立的底层数据。