ohn*_*nyj 3 c++ singleton code-separation
我正在编写一个实用程序类库,其中许多是单例.我使用继承实现了它们:
template <class T>
class Singleton {
public:
T& getInstance() {
if(m_instance == 0) {
m_instance = new T;
}
return m_instance;
}
private:
static T* m_instance;
};
class SomeClass : public Singleton<SomeClass> {
public:
SomeClass() {}
virtual ~SomeClass() {}
void doSomething() {;}
};
Run Code Online (Sandbox Code Playgroud)
显然这是一个简单的例子,而不是一个真正的类.无论如何,我发现使用如下代码:
SomeClass::getInstance().doSomething();
Run Code Online (Sandbox Code Playgroud)
将创建SomeClass的多个实例.我想这可能是因为它在我的库(.a)文件之外以及内部使用.例如,我使用的是一个非自己编写的UI库,它是单独编译的,我正在添加它.其中一些添加使用单体,这些单体也在我的.a库中使用.
单独的编译会导致这种情况吗?别的什么?
我设法解决这个问题的唯一方法是在main.cpp文件中创建一个全局对象,我用我需要的任何单例初始化它.然后,所有代码都通过以下调用访问此公共全局对象:
GlobalObject::getSomeClass().doSomething()
Run Code Online (Sandbox Code Playgroud)
我不想每次创建另一个单例时都要为这个对象添加一个额外的方法.使用第一种访问方法,语法似乎更清晰,更熟悉:
SomeClass::getInstance().doSomething();
Run Code Online (Sandbox Code Playgroud)
如果您有任何想法,意见等,请告诉我.
谢谢.