Chinaunix首页 | 论坛 | 博客
  • 博客访问: 288591
  • 博文数量: 148
  • 博客积分: 4365
  • 博客等级: 上校
  • 技术积分: 1566
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-05 21:38
文章分类
文章存档

2014年(2)

2013年(45)

2012年(18)

2011年(1)

2009年(54)

2008年(28)

我的朋友

分类:

2012-12-19 10:37:43

C++中对于对象初始化有着严格的顺序,先基类再派生类。

确保变量/对象作为右值使用前已经完成初始化(initialized),否则会导致杯具。

在构造函数中使用冒号初始化列表优于在函数体中赋值。

当涉及到静态变量时,不同编译单元(translation unit,通常理解为文件)中的初始化顺序并无明确保障。当存在一个文件中的静态变量需要用另外文件中的静态变量赋值时,如何保障后者已先被初始化,这时考虑将后者变为 local static 变量,想象C++中的单例模式。

class FileSystem { ... };           // as before
FileSystem& tfs()                   // this replaces the tfs object; it could be
{                                   // static in the FileSystem class
  static FileSystem fs;             // define and initialize a local static object
  return fs;                        // return a reference to it
}

想要获取fs对象时就调用tfs这个函数,fs成为local static变量,函数调用时如果没有初始化,则肯定会被初始化,避免了风险。

总结: build-in类型变量需手工初始化;跨编译单元依赖时可以考虑 local static 方法。
阅读(277) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~