复制构造函数,赋值操作符,深浅复制,数组转换成vector数据

//赋值操作符重载
CExample & CExample::operator = (const CExample& RightSides)
{
    nSize=RightSides.nSize; //复制常规成员
    char *temp=new char[nSize]; //复制指针指向的内容 
    memcpy(temp,RightSides.pBuffer,nSize*sizeof(char));
    delete []pBuffer; //删除原指针指向内容  (将删除操作放在后面,避免X=X特殊情况下,内容的丢失)
    pBuffer=temp;   //建立新指向
    return *this
}
拷贝构造函数
CExample::CExample(const CExample& RightSides)
{
    pBuffer=NULL;
    *this=RightSides     //调用重载后的"="
}


调用复制构造函数:

1、一个对象以值传递的方式传入函数体
2、一个对象以值传递的方式从函数返回
3、一个对象需要通过另外一个对象进行初始化


深复制与浅复制
1、在构造函数中,要为指针类型的成员,分配专门的空间。以这条规则构建的复制,称作为深复制
2、所谓浅复制,如同上面出现过的构造函数中处理的一样,直接为数据成员赋值即可


浅复制带来的危害
如果类里面有个数据成员是指针类型,构造函数里面直接进行指针复制,如private:
char *cptr;
public:
Test(char *str)
{
  strcpy(cptr,str);
}
这里就会出现问题,因为cptr没有分配地址,是野指针,这样是很危险,所以要用深复制
private:
char *cptr;
public:
Test(char *str)
{
  cptr=new char[strlen(str)+1];
  strcpy(cptr,str);

}


int a[]={1,2,3,4,5,6};

vector<int> value(a,a+6);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值