C++构造函数相关使用方式解读

我们今天将会为大家详细介绍一下有关C++构造函数的基本应用方式。希望初学者们可以通过本文介绍的内容充分掌握这方面的知识,以便在将来实际应用中获得帮助,并且在一定程度上加深对这一语言的认知程度。#t#

专注于为中小企业提供网站设计、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业新会免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

我们知道,当定义一个对象时,会按顺序做2件事情:

1)分配好内存(非静态数据成员是未初始化的)

2)调用C++构造函数(构造函数的本意就是初始化非静态数据成员)

显然上面代码中,CLS obj;这里已经为obj分配了内存,然后调用默认构造函数,但是默认构造函数还未执行完,却调用了另一个构造函数,这样相当于产生了一个匿名的临时CLS对象,它调用CLS(int)构造函数,将这个匿名临时对象自己的数据成员m_i初始化为0;但是obj的数据成员并没有得到初始化。于是obj的m_i是未初始化的,因此其值也是不确定的

从这里,我们归纳如下:

1)在c++里,由于构造函数允许有默认参数,使得这种C++构造函数调用构造函数来重用代码的需求大为减少

2)如果仅仅为了一个构造函数重用另一个构造函数的代码,那么完全可以把构造函数中的公共部分抽取出来定义一个成员函数(推荐为private),然后在每个需要这个代码的构造函数中调用该函数即可

3)偶尔我们还是希望在类的构造函数里调用另一个构造函数,可以按下面方式做:

在C++构造函数里调用另一个构造函数的关键是让第二个构造函数在第一次分配好的内存上执行,而不是分配新的内存,这个可以用标准库的placement new做到:

先看看标准库中placement new的定义

 
 
 
  1. inline void *__cdecl operator new(size_t, void *_P)  
  2. {  
  3. return (_P);   
  4. }  

可见没有分配新的内存。

正确的方式:

 
 
 
  1. struct CLS  
  2. {  
  3. int m_i;  
  4. CLS( int i ) : m_i(i){}  
  5. CLS()  
  6. {  
  7. new (this)CLS(0);  
  8. }  
  9. }; 

另: 若C++构造函数调用自身,则会出现无限递归调用,是不允许的

网站栏目:C++构造函数相关使用方式解读
当前地址:http://www.csdahua.cn/qtweb/news11/233911.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网