浅拷贝和深拷贝「详解 附代码」

共同点

当对象成员中无指针或引用时,浅拷贝与深拷贝相同,可以互用.

浅拷贝和深拷贝区别

浅拷贝

浅拷贝等价于一种对值的复制,当出现指针时,浅拷贝将指针储存的值———地址,原模原样复制过去.即浅拷贝出的新对象和原有对象共享一片内存空间.

深拷贝

深拷贝是将原对象重新拷贝一份副本在一片新的内存中.当出现指针时,必须使用深拷贝才能防止原对象和新建对象相互干扰,否则会出现当对象析构时,原对象和新对象对同一块区域释放两次内存的情况而引起内存泄漏或程序崩溃.

深拷贝的构造

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值