C++编程语言的应用范围非常广泛,而且功能很强大,它能够支持很多程序设计风格。其中就包括对面向对象的支持。在这里我们将会为大家详细介绍一下有关C++对象复制的应用方式,以帮助大家学习。
公司主营业务:做网站、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出休宁县免费做网站回馈大家。
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次,为何?#t#
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
- }
- Table & Table::operator=(const Table &t)
- {
- if(this!=&t){
- delete []p;
- p = new Name[sz=t.sz];
- for(int i=0;i
- }
- return *this;
- }
C++对象复制的基本概念就为大家介绍到这里。
名称栏目:C++对象复制相关应用方式浅析
当前网址:http://www.gawzjz.com/qtweb/news7/209507.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联