一个完美的类的构造函数应该这样写

 

1: 初始化效率要高效。
      所有的成员变量初始化通过 初始化列表实现。
      如果放在类的构造函数里面初始化,效率会低!
      因为:在进入类的构造函数之前,类必须是一个已经构造好的类了!也就是,其内部成员变量也已经被构造好了。也就是进入构造函数之前所有的内部成员变量都已经执行了参数为空的构造(假设没有用初始化列表)。
      如果你实现了构造函数,那么编译器会生成调用构造函数的代码,这里的代码已经不是构造了,变成了修改!
      m_classB = _B; // 这里执行的是 赋值运算,而不是copy构造函数。m_classB已经被构造起来了。
      效率低显而易见;

      代码验证:
class SA
{
public:
 SA( int i ):_i(i){};
 int _i;

};

class F_SA
{
public:
 F_SA( const SA& sa ){ m_sa = sa; }// 错误
 //F_SA( int i=0 ):m_sa(i){  } // 正确
 SA m_sa;
};

int _tmain( int argc, TCHAR* argv[] )
{
 F_SA fsa;    // 编译失败!!! m_sa通过初始化列表初始化失败!没有和合适构造函数调用!

 system( "pause" );
 return 0;
}



2:防止在构造函数中资源泄漏。
     见Effective C++ 条款十 可以通过auto_ptr<>封装的指针,就可以能自动资源回收

3:如果构造失败,应该向上跑出异常。
     假设有一个成员变量指针,通过初始化列表申请内存,那么如果其失败,其会自动抛出异常向上传递。不用担心《此刻注意条款2中的资源泄漏》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值