【发布时间】:2010-12-17 15:42:12
【问题描述】:
我正在使用 boost 单例(来自序列化)。
例如,有些类继承了boost::serialization::singleton。他们每个人在它的定义附近都有这样的定义(在h文件中):
#define appManager ApplicationManager::get_const_instance()
class ApplicationManager: public boost::serialization::singleton<ApplicationManager> { ... };
每次更新(近 17 毫秒)时,我都必须调用该类的某个方法,例如 200 次。所以代码是这样的:
for (int i=0; i < 200; ++i)
appManager.get_some_var();
我用gprof 查看函数调用堆栈,发现boost::get_const_instance 每次都调用。也许,在发布模式下编译器会优化这个?
我的想法是制作一些全局变量,例如:
ApplicationManager &handle = ApplicationManager::get_const_instance();
并使用handle,这样就不会每次都调用get_const_instnace。对吗?
【问题讨论】:
-
最简单的解决方案是根本不使用单例。
-
@deadmg 我知道有人会发布这个 :) 请不要说使用单身人士,无论如何他们都会。
-
有人总是发布它,因为它是真的。
-
删除#define 并使用内联函数,拜托哦拜托。
标签: c++ function boost singleton call