c++深拷贝与浅拷贝

1.两者的区别
浅拷贝:按照我的理解就是,两类之间发生数据成员的赋值,如果只是简单数据类型之间的赋值,浅拷贝完全能够胜任,但是碰到有指针的时候,两个类之间浅拷贝,那么两个对象中的指针会指向同一个地址,那么析构函数执行的时候就会发生错误(同一指针释放了两次)。
深拷贝:在浅拷贝的基础上对指针拷贝进行处理,让两个类指针中的指针指向不同的区域,这样两个类指针虽然内容想到,但是是存储在内存的不同区域。
以下为深拷贝举例:
#include<iostream>
#include<cstring>
using namespace std;
class String
{
protected:
     char *m_str;
public:
  String(){m_str=new char[1];m_str[0]=0;} 
  String(char *s)
  {
      if(s!=0)
    {
 m_str=new char[strlen(s)+1];//注意必须申请空间
        strcpy(m_str,s);//必须加上if(s),strcpy第二个不能为空
    }
  }   
  String operator=( String s);
 void show(){cout<<m_str<<endl;}
};
String&  String::operator=( String s)
{
  delete[] m_str;//加上使前面空间不浪费
  m_str=new char[strlen(s.m_str)+1];//注意申请空间
  strcpy(m_str,s.m_str);
  return *this;
}
int main()
{
 String s1("abc"),s2;
 s2=s1;
 s2.show();
}
          

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值