首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于多个 Singleton 对象析构顺序的有关问题

2012-03-16 
关于多个 Singleton 对象析构顺序的问题在EffictveC++中第4条:确定在对象使用前已被先初始化。在最后介绍怎

关于多个 Singleton 对象析构顺序的问题
在Effictve   C++   中第4条:确定在对象使用前已被先初始化。
在最后介绍怎样使用   local   static   对象保证对象初始化时说到Singleton模式,
FileMgr*   FileMgrPtr()
{
      static   FileMgr   mgr;
      return   &mgr;
}
它里面仅仅讲到对象初始化问题,就是在程序开始时手工调用所有的reference-returning   函数.

但是没有讲到程序退出时这些singleton对象析构顺序问题,比如我做了个测试,其中有NetworkMgr   and   FileMgr,   都是Singleton对象,NetworkMgr在程序退出时需要通过FileMgr保存一些状态信息到磁盘上,我怎么保证FileMgr对象比NetworkMgr晚
析构呢?

[解决办法]
《C++设计新思维》第六章有详细讨论。

[解决办法]
1.抛出异常:设置static bool destroyed_标志,使用已析构的Singleton对象时抛出异常。
2.Phoenix Singleton:如果要使用已析构的Singleton对象,就使用placement new在原位置重新构造对象,并使用atexit()注册该对象的析构函数。
3.带寿命的Singleton:统一管理所有的Singleton,为每个Singleton设置寿命,寿命长的Singleton必须在寿命短的Singleton析构后析构。

热点排行