读书人

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

发布时间: 2012-03-16 16:34:56 作者: rapoo

关于多个 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析构后析构。

读书人网 >C++

热点推荐