c++拷贝构造拷贝赋值,浅拷贝,深拷贝问题

下边说一下拷贝拷贝构造拷贝赋值,浅拷贝,深拷贝问题
拷贝赋值

//拷贝赋值函数
inline String& String::operator=(const String& str){
    if(this==&stt)    //用来检测自我赋值(self assignment)
        return* this; 
    delete[] m_data;
    m_data=new char[strlen(str.m_data)+1];
    strcpy(m_data,str.m_data);
    return *this;
}

检测自我赋值的作用:

1.如果是自己给自己赋值,这样检测可以提高效率

2.如果没有这个检测代码,会导致错误,会导致自己先把自己删除,因为它的第一件事就是delete
在插入图片描述

拷贝构造函数

inline
String::String(const char* cstr=0){
    if(cstr){
        m_data=new char[strlen(cstr)+1];//需要动态分配内存
        strcpy(m_data,cstr);
    }
    else{//未指定处值
        m_data=new char[1];
        *m_data='\';
    }
}
{
    String s1();
    String s2("Hello");
}

如果类中有拷贝指针,需要重写拷贝构造函数(深拷贝),不重写的话直接是浅拷贝(没有真正分配内存空间,两个指针指向同一块内存)。这样会导致内存泄漏问题

使用默认拷贝构造函数就会出现下面这种情况:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值