`
kmplayer
  • 浏览: 497034 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款47:使用non-local static objects之前先确定它已有初值

阅读更多
1,当一个编译单元内某对象的初始化动作,与另一个编译单元内某对象的值相依,而后者也需要初始化。
可能导致第一个对象没有初值。

2,解决的办法:Singleton pattern。
将每一个non-local static object转到一个专属函数中,接下来令函数传回一个reference,指向内含的那个static object。
这样,客户不再直接取用static object,而是改调用函数。
依据:C++明确指出函数中的static对象的初始化时机:在函数调用期间第一次遇到对象的定义时。

这样做的另一个好处:如果从未调用带有非本地静态对象的函数,那么绝不会付出对象的构造和析构成本。

例:
FileSystem& theFileSystem()
{
static FileSystem tfs;
return tfs;
}
客户端几乎完全不变,只不过它们现在调用theFileSystem(),而不是直接取用theFileSystem。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics