资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

C++中怎么实现对象复制

今天就跟大家聊聊有关C++中怎么实现对象复制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联公司主营丁青网站建设的网络公司,主营网站建设方案,APP应用开发,丁青h5微信小程序开发搭建,丁青网站营销推广欢迎丁青等地区企业咨询

C++对象复制代码示例:

class Table{  Name * p;  size_t sz;  publish:  Table(size_t s = 15){p = new Name[ssz=s];}  ~Table(){delete[]p ;}  ......  }  void h()  {  Table t1;  Table t2 = t1;  Table t3;  t3 = t2;  }

在h()结束时,默认构造函数调用了2次,而析构函数被调用了3次,为何?

  • Table t1; 调用1次默认构造函数

Table t2 = t1;默认的对象的赋值操作,按成员赋值,其中关于指针p,仅仅是将t1.p赋值给t2.p,即t2.p = t1.p,并无内存分配。对象t1和t2的p指针均指向同一块内存。

Table t3; 调用1次默认构造函数

t3 = t2; 原t3.p指针被t2.p覆盖,此时t3.p同样指向对象t1和t2的p指针的同一块内存。注意:t3原分配给p的内存由于没有指针指向,无法利用,造成存储浪费。

h()结束,对象t1,t2,t3的析构函数调用,此时对t1,t2,t3的指针p所指的同一块存储进行了三次删除,非常危险,导致的结果是无发预料的,很可能灾难性的。

因此明确定义类的复制构造函数(拷贝构造函数)和赋值预算可避免这样的错误。

代码

Table::Table (const Table &t)  {  p = new Name[sz=t.sz];  for(int i=0;i

看完上述内容,你们对C++中怎么实现对象复制有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


当前名称:C++中怎么实现对象复制
地址分享:http://www.cdkjz.cn/article/piccoj.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220