深拷贝
深拷贝是指在复制对象时,不仅复制对象的所有成员变量的值,还复制成员变量指针或引用所指向的实际数据。这意味着原对象和拷贝对象拥有独立的底层数据,互不影响。
#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: 25person2.printAge(); // 输出:Age: 25// 修改person1的年龄*(person1.age) = 30;person1.printAge(); // 输出:Age: 30person2.printAge(); // 输出:Age: 25(独立的数据)return 0;
}
在这个示例中,person2
是通过深拷贝 person1
创建的。修改 person1
的年龄不会影响 person2
,因为它们有各自独立的 age
数据。
总结:
- 浅拷贝:只复制对象的成员变量值(包括指针或引用),导致原对象和拷贝对象共享相同的底层数据。
- 深拷贝:不仅复制对象的成员变量值,还复制成员变量指针或引用所指向的实际数据,使得原对象和拷贝对象拥有独立的底层数据。