Effective C++——4.确定对象被使用前已经初始化

1.为防止有的情况下对象未初始化导致的混乱,最佳的处理办法就是:永远在使用对象之前先将它初始化。对于无任何成员的内置类型,必须手工完成

2.内置类型以外的任何其他东西,初始化责任在构造函数中。规则很简单:确保每一个构造函数都将对象的每一个成员初始化

3.C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前。在构造函数中就是给成员变量赋值,而不是初始化

4.可以用成员初始化列表对成员变量进行初始化,但因为类成员变量有时候非常多,所以这只是理想情况

5.初始化时是调用变量的构造函数传递值,赋值是调用 = 操作符传递值

6.可以立下一个规则:总是在初值列中列出所有成员变量,以免要记住哪些成员变量不需要初始化,同时可以保证有const和引用变量时正常初始化

7.初始化的顺序最好和变量声明的顺序相同,防止初始化有先后要求的时候不一致

8.编译单元指产出单一目标文件的源码,基本上是单一源码加上包含的头文件

9.C++对定义于不同编译单元的non-local static对象的初始化没有固定顺序,如果要确定顺序,可以将non-local static放到函数内。这些函数返回对象的引用,然后用户调用函数,而不直接干涉对象,这是单例的常用实现方法之一

记住三点:

1.为内置型对象进行手工初始化,因为C++不保证初始化它们

2.构造函数最好使用成员初值列,而不要在构造函数内使用赋值操作。初值列的成员变量,应该和class中的声明次序相同

3.为免除“跨编译单元之初始化次序”问题,用local static对象替换non-local static对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值