目前我有meyer singleton的实现:
class ClassA
{
public:
static ClassA& GetInstance()
{
static ClassA instance;
return instance;
}
private:
ClassA::ClassA() {};
// avoid copying singleton
ClassA(ClassA const&);
void operator = (ClassA const&);
};
现在我需要一些改进才能在C ++ - 98和VS-2008中安全地使用此代码线程吗?!
谢谢!
PS:有什么不清楚的?你看到标签visual-studio-2008和c ++ - 98 - >所以目标操作系统是Windows!我也不明白为什么我只是投票,一些人根本不喜欢辛格尔顿!答案 0 :(得分:4)
迈耶单身人士一般不是最好的解决方案 特别是在多线程环境中。更一般的 实现单身人士的方式是:
class ClassA
{
static ClassA* ourInstance;
// ctor's, etc.
public:
static ClassA& instance();
};
并在源文件中:
ClassA* ClassA::ourInstance = &instance();
// This can be in any source file.
ClassA&
ClassA::instance()
{
if ( ourInstance == NULL ) {
ourInstance = new ClassA;
}
return *ourInstance;
}
这是线程安全的如果在进入之前没有创建线程
main
(应该是这种情况),而且不是动态的
加载(如果对象是,也应该是这种情况
是唯一的,可以从静态的构造函数访问
对象,然后它必须是他们的静态构造函数
跑)。它还具有避免任何顺序的优点
破坏问题。