1 #include<iostream> 2 #include<string> 3 using namespace std; 4 class Test{ 5 private: 6 int*m_pointer; 7 public: 8 Test(){ 9 m_pointer = NULL; 10 } 11 Test(int i){ 12 m_pointer = new int(i); 13 } 14 //深拷贝要完成的2件事 ① 拷贝构造函数 15 Test(const Test& obj){ 16 m_pointer = new int(*obj.m_pointer); 17 } 18 //② 操作符函数重载 19 //返回值是引用的原因:连续赋值;且参数也必须是const引用 20 Test& operator = (const Test& obj){ 21 //避免自己赋值给自己 22 if(this != &obj){ 23 //此处才进行深拷贝 24 delete m_pointer; 25 m_pointer = new int(*obj.m_pointer); 26 } 27 //返回当前对象 28 return *this; 29 } 30 } 31 void print(){ 32 cout << "m_pointer=" << m_pointer << endl; 33 } 34 //只有在堆空间申请内存的时候才会自定义析构函数 35 //栈上的内存不用自定义析构函数 36 ~Test(){ 37 delete m_pointer; 38 } 39 }; 40 int main(){ 41 Test t1(25); 42 Test t2; 43 t2 = t1; 44 t1.print(); 45 t2.print(); 46 return 0; 47 } 48 49 50 运行结果: 51 m_pointer=0x2309c20 52 m_pointer=0x2309c40