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

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

如有问题,欢迎交流指正

永远在使用对象之前先将它初始化,特别是内置类型。

  • 构造函数的初始化任务使用 m e m b e r   i n i t i a l i z a t i o n   l i s t member\,initialization\, list memberinitializationlist替换函数体中的赋值动作。
  • C++规定,对象的成员变量的初始化动作发生在进入构造函数函数体之前。
  • 规定总是在初值列中给出所有成员变量,以免还得记住哪些成员变量无需初值。
  • 如果类中存在多个构造函数,为避免初值列中出现令人不快的重复。可以合理地在初值列中“遗漏”那些“赋值表现的像初始化一样好”的成员变量,改用它们的赋值操作,并将这些赋值操作移动到一个函数中实现(private),供所有构造函数调用。
  • 初值列的初始化顺序参照声明顺序,所以在编写初值列时最好也按照声明顺序。
  • “不同编译单元内定义之 n o n − l o c a l   s t a t i c non-local\,static nonlocalstatic对象”的初始化次序
  • 所谓编译单元是指产出单一目标文件的那些源码。基本上它是单一源码文件加上其所含入的头文件。
  • 所谓 s t a t i c static static对象,这种对象包括 g l o b a l global global对象、定义于 n a m e s p a c e namespace namespace作用域内的对象、在 c l a s s e s classes classes内、在函数内、以及在 f i l e file file作用域内被声明为 s t a t i c static static的对象。函数内的 s t a t i c static static对象被称为 l o c a l   s t a t i c local\,static localstatic对象,其他对象被称为 n o n − l o c a l   s t a t i c non-local\,static nonlocalstatic对象。
  • 真正的问题是:如果某编译单元内的某个 n o n − l o c a l   s t a t i c non-local\,static nonlocalstatic对象的初始化动作使用了另一个编译单元内的某个 n o n − l o c a l   s t a t i c non-local\,static nonlocalstatic对象,后者可能未被初始化。因为C++对**“定义于不同编译单元内的 n o n − l o c a l   s t a t i c non-local\,static nonlocalstatic对象”**的初始化次序并无明确定义
  • 将每个 n o n − l o c a l   s t a t i c non-local\,static nonlocalstatic对象搬到自己专属的函数内,这些函数返回一个reference指向它所含的对象。C++保证函数内的 l o c a l   s t a t i c local\,static localstatic对象会在“该函数被调用期间”“首次遇上该对象之定义式”时被初始化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值