码迷,mamicode.com
首页 > 其他好文 > 详细

条款04:确定对象被使用前已被初始化

时间:2017-12-10 23:09:56      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:pos   post   声明   不能   blog   nes   成员   lte   默认   

记住:永远在使用对象前先将它初始化。

1、不要混淆赋值assignment和初始化initialization。

ABEntry::ABEntry(const std::string& name,const std::string& address,const std::list<PhoneNumber>& phones)//版本1
{
     theName = name;//这些都是赋值而非初始化
     theAddress = address;
     thePhones = phones;
     numTimesConsulted = 0;

}

ABEntry::ABEntry(const std::string& name,const std::string& address,const std::list<PhoneNumber>& phones)//版本2
:theName(name),//调用thename的默认构造函数
   theAddress (address),//下面也是一样操作
   thePhones (phones),
   numTimesConsulted (0)
{ }

记住如果没有在构造函数的初始化成员列表中显式地初始化成员,则该成员将在构造函数体之前执行默认初始化,比如说上面第一个,在进行赋值之前,theName会调用默认构造函数执行初始化操作。

初始化和赋值的区别事关底层效率问题,前面直接使用拷贝构造函数进行初始化,后者则先默认初始化然后才调用拷贝赋值运算符进行赋值。

 

拷贝构造函数的概念:如果构造函数的第一个参数是自身类类型的引用,且任何额外的参数都有默认值,则该构造函数就是拷贝构造函数。

如果成员变量是const或references,它们就一定需要初值,不能被赋值。

C++有着十分固定的成员初始化顺序。基类早于派生类被初始化,而class的成员变量总是以其声明次序被初始化。

 

条款04:确定对象被使用前已被初始化

标签:pos   post   声明   不能   blog   nes   成员   lte   默认   

原文地址:http://www.cnblogs.com/dingxiaoqiang/p/8018143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!