共同点
当对象成员中无指针或引用时,浅拷贝与深拷贝相同,可以互用.
浅拷贝
浅拷贝等价于一种对值的复制,当出现指针时,浅拷贝将指针储存的值———地址,原模原样复制过去.即浅拷贝出的新对象和原有对象共享一片内存空间.
深拷贝
深拷贝是将原对象重新拷贝一份副本在一片新的内存中.当出现指针时,必须使用深拷贝才能防止原对象和新建对象相互干扰,否则会出现当对象析构时,原对象和新对象对同一块区域释放两次内存的情况而引起内存泄漏或程序崩溃.
深拷贝的构造
class item{
private:
char* str;
public:
item(const char * p =NULL):str(NULL){ //构造函数
if(p!=NULL){
int len =(int)strlen(p)+1;
str= new char[len];
strcpy(str,p);
}
}
item(const item& t){ //深拷贝,创建一片新的空间
int n=(int)strlen(t.str)+1;
str=new char[n];
strcpy(str,t.str);
}
~ item( ){
delete [] str;
str=NULL;
if(str==NULL){
cout<<"yes"<<endl;}
else cout<<"error"<<endl;
}
int main(){
item p("hh");
return 0;
}
运行结果:
yes