一、浅拷贝和深拷贝 9
浅拷贝 = 复制指针,深拷贝 = 复制指针 + 复制内容。
多数情况下:
- 编译器进行的拷贝(浅拷贝)
- 程序员进行的拷贝(深拷贝)
代码示例 1 (浅拷贝):
class MyClass {
public:
int* data;
MyClass(int value) {
data = new int;
*data = value;
}
// 默认拷贝构造函数 (浅拷贝)
};
int main() {
MyClass obj1(10);
MyClass obj2 = obj1; // 浅拷贝
std::cout << *obj1.data << std::endl; // 输出: 10
std::cout << *obj2.data << std::endl; // 输出: 10
delete obj1.data; // 释放内存
// obj2.data 指向的内存已被释放,再次访问会导致错误
// std::cout << *obj2.data << std::endl;
return 0;
}
代码示例 2 (深拷贝):
class MyClass {
public:
int* data;
MyClass(int value) {
data = new int;
*data = value;
}
// 自定义拷贝构造函数 (深拷贝)
MyClass(const MyClass& other) {
data = new int;
*data = *other.data;
}
~MyClass() {
delete data;
}
};
int main() {
MyClass obj1(10);
MyClass obj2 = obj1; // 深拷贝
std::cout << *obj1.data << std::endl; // 输出: 10
std::cout << *obj2.data << std::endl; // 输出: 10
delete obj1.data; // 释放 obj1 的内存
// obj2.data 指向独立的内存空间,访问安全
std::cout << *obj2.data << std::endl; // 输出: 10
return 0;
}