条款四 确定对象使用前已经被初始化

条款四 确定对象使用前已经被初始化

对象成员变量初始化问题

对象成员变量都是在调用构造函数的时候被初始化的。

class A{
  A();
 private:
  int a = 1;// 没有进行初始化,但是进行了声明,这个值会在初始化的时候赋值给他
  char b;
  string str;
}


// 初始化时间
A::A()
:a(),b(),str(){ // 这里进行变量的初始化,无论有没有显性的调用都会自动进行初始化
  
  a = 1// 这里是属于初始化之后的重新调用拷贝构造函数进行赋值了,效果没有那么好
}
  • 尽量在初值中初始化,效率高
  • 初值初始化可以避免奇怪的初始值问题
  • 初始话的次序总是按照类中声明的顺序进行

静态成员变量进行初始化问题(local-static / non-local-static)

因为static只有在被执行到的时候才会进行初始化。

non-local static 变量可能是放在不通的namespace 或者是不通的文件里面的,那么初始化的顺序就会出现混乱。

如果初始化前就调用了,会出现错误。

所有对于non-local static变量一般使用singlon的方式来封装起来

TypeClass& GetTypeClass(){ // 需要使用直接调用GetTypeClass() , 而不访问对象。
  static TypeClass A;
  return A:
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值