不要混淆赋值初始化,对于大多数类型而言,比起先调用默认构造函数然后调用赋值操作符,只调用一次拷贝构造函数是高效的
对于内置类型,也需要成员初值列(member initialization list)来初始化,对于const和reference,则是必须的

基类先于子类先初始化,class的成员变量初始化的顺序是以其声明的次序被初始化

不同编译单元内定义的non-local static对象

static对象包括global对象,定义于namespace,class,函数以及file作用域被声明为static对象
函数内的static对象称为local static对象,其他称为non-static对象,程序结束时,static对象被销毁,也就是它们的析构函数会在main()结束时被调用
C++不同编译单元内定义的non-local static对象的初始化相对次序并无明确定义

可以在设计上消除这个问题:将每个non-local static对象搬到自己的专属函数内(该对象在函数内被声明为static),然后函数返回其引用,non-local static对象便被local static对象替换了,这是Singleton模式常用的手法

任何non-const static对象,不论它是否是local还是non-local,在多线程下等待某事发生都会发生麻烦,处理这种麻烦的一种做法是在程序的单线程启动阶段,就手工调用所有reference-returning函数,可消除与初始化有关的竞态(race conditions)

请记住

  • 为内置类型对象进行手工初始化,C++不保证初始化它们
  • 构造函数最好使用成员初值列,成员变量的排列次序应该与其在class中的声明顺序相同
  • 为免除"跨编译单元的初始化次序"问题,请以local static对象替代non-local static对象

最新文章

  1. postgreSQL使用
  2. 【Go入门教程6】interface(interface类型、interface值、空interface{}、嵌入interface、反射)
  3. 10款让WEB前端开发人员更轻松的实用工具
  4. 2.SDK目录结构和adb工具及命令介绍
  5. Chrome开发工具Elements面板(编辑DOM和CSS样式)详解
  6. Day1(2016/1/21)——Beginning
  7. Unity3D脚本18:可视化辅助设置类 Gizmos
  8. JSBinding + SharpKit / 实战:转换 Survival Shooter
  9. logstash_agent.conf 语法注意事项
  10. 利用iOS API编写简单微博客户端全过程
  11. 首次push本地代码到github上出现的问题及解决方案
  12. sqlserver使用户只能在某个架构下建立表和存储过程
  13. arcgis jsapi 调用google地区服务
  14. vue集成百度UEditor富文本编辑器
  15. 简单模拟一下ab压力测试
  16. react+react-router+react-redux+nodejs+mongodb项目
  17. Python3.x在linux下print中文问题
  18. vue模式
  19. BSGS&扩展BSGS
  20. git忽略某些文件的几种方法

热门文章

  1. php中用生成的公钥、私钥进行加密解密
  2. debian配置国内软件源
  3. Word2Vec模型参数 详解
  4. container_of宏解析 && 为什么需要使用中间变量__mptr?
  5. Tomcat使用介绍
  6. Delphi 快速检测是否联网 判断网线是否拔开。 但是不能判断是否能上网
  7. 正则表达式——Unicode 属性列表
  8. TCP的三次握手过程
  9. 【ABAP系列】SAP Web Dynpro 技术简介
  10. lsb-realse