接上篇 https://blog.csdn.net/uguihiho9ihu/article/details/93775864
浅复制/浅拷贝
执行逐个字节的复制工作
MyString S1, S2;//同类对象
S1 = “this”;//上篇重载了“=”,可以将字符串赋值给Mystring类
S2 = “that”;
S1 = S2;//浅拷贝
深复制/深拷贝
将一个对象中指针变量指向的内容,复制到另一个对象中指针成员对象指向的地方
实现深拷贝
String & String::operator = (const String & s){
if(str == s.str) return * this;
if(str) delete [] str;
if(s.str) { //s.str不为NULL才会执行拷贝
str = new char[strlen(s.str)+1];
strcpy( str,s.str);
}
else
str = NULL;
return * this;
}
总结深拷贝与浅拷贝
浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一块内存
深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝
深拷贝意味着拷贝了资源和指针,浅拷贝只是拷贝了指针,使得两个指针指向同一内存,造成同一资源析构两次!!!