深/浅拷贝
深/浅赋值
对象:指针
浅拷贝:
一个指针将自己所指的空间地址给另一个指针赋值,即两个指针指向同一个空间。
问题:会导致对同一个空间double free 的情况
String{char* m_ptr;};
String s2=s1;//当两个对象离开生存域的时候,会先后调用s2、s1的析构函数。存在对同一个空间释放两次。
深拷贝:
指针1给指针2赋值时,指针2先开辟一个与指针1所指空间大小(+1)相等的大小空间,指针1所指空间内容依次给指针2所指空间赋值。指针1与指针2分别有各自所指空间且内容一样。
深/浅赋值:
与深浅拷贝原理一致,但需要注意被赋值的对象可能本身已经开辟了空间,所以在重新开辟空间时要先释放被赋值对象原有的空间。