重开也不是不可能 ~.~
浅拷贝

#include <iostream>
#include <cstring>
class ShallowCopyExample {
public:
int m_nValue;
int* m_pData;
// 构造函数,初始化指针成员
ShallowCopyExample(int value) : m_nValue(value) {
m_pData = new int(0);
*m_pData = value;
}
// 析构函数,释放指针内存
~ShallowCopyExample() {
delete m_pData;
m_pData = nullptr;
}
};
int main() {
ShallowCopyExample obj1(10);
ShallowCopyExample obj2 = obj1; // 使用默认的浅拷贝构造函数
// 修改obj2的指针成员指向的值,obj1的指针成员指向的值也会随之改变
*obj2.m_pData = 20;
// 输出obj1和obj2的指针成员指向的值
std::cout << "*obj1.m_pData: " << *obj1.m_pData << std::endl; // 输出20
std::cout << "*obj2.m_pData: " << *obj2.m_pData << std::endl; // 输出20
return 0;
}
//当程序结束时,obj1和obj2的析构函数会先后调用,导致m_pData被释放两次,引发未定义行为
深拷贝

#include<iostream>
class DeepCopyExample {
public:
int m_nValue;
int* m_pData;
// 构造函数
DeepCopyExample(int value) : m_nValue(value) {
m_pData = new int(0);
*m_pData = value;
}
// 深拷贝构造函数
DeepCopyExample(const DeepCopyExample& other) : m_nValue(other.m_nValue) {
m_pData = new int(*other.m_pData); // 重新分配内存并复制数据
}
// 析构函数
~DeepCopyExample() {
delete m_pData;
m_pData = nullptr;
}
};
int main() {
DeepCopyExample obj1(10);
DeepCopyExample obj2 = obj1; // 使用深拷贝构造函数
// 修改obj2的指针成员指向的值
*obj2.m_pData = 20;
// 输出obj1和obj2的指针成员指向的值
std::cout << "*obj1.m_pData: " << *obj1.m_pData << std::endl; // 输出10
std::cout << "*obj2.m_pData: " << *obj2.m_pData << std::endl; // 输出20
return 0;
}
深拷贝与浅拷贝的区别

C++拷贝最佳实践
