【发布时间】:2009-07-07 09:38:46
【问题描述】:
最近我遇到了关于实现单例但涉及抽象基类的问题。 假设我们有这样的类层次结构:
class IFoo {...}; // it's ABC
class Foo : public IFoo {...};
我们有如下定义的单例类:
template <typename T>
class Singleton
{
public:
static T* Instance() {
if (m_instance == NULL) {
m_instance = new T();
}
return m_instance;
}
private:
static T* m_instance;
};
所以如果我想像下面这样使用:IFoo::Instance()->foo(); 我该怎么办?
如果我这样做:class IFoo : public Singleton<IFoo> {...}; 它将不起作用,因为 Singleton 将调用 IFoo 的 ctor 但 IFoo 是 ABC,因此无法创建。
而且这个:class Foo : public IFoo, public Singleton<Foo> {...}; 也不能工作,因为这样类 IFoo 没有方法 Instance() 的接口,所以调用 IFoo::Instance() 会失败。
有什么想法吗?
【问题讨论】:
-
能否格式化一下代码
-
请不要使用这种单例模式。这是单例实现的经典反模式,因为很难正确销毁实例。 stackoverflow.com/questions/86582/…
-
关于如何在 C++ 中实现单例以及线程安全的精彩讨论可以在这篇论文中找到:aristeia.com/Papers/DDJ%5FJul%5FAug%5F2004%5Frevised.pdf