1

我有四个班级,我们称之为 S1、S2、S3 和 S4。这些类是单例;每个都有一个 getInstance 和一个 finalize 方法 - 以及一个实例私有变量。

现在,为了避免重复 finalize 和 getInstance 方法,我正在尝试创建一个 SingletonMixin 类,例如:

template<class T> class SingletonMixin
{
    public:
        static T* getInstance();
    private:
        static T* instance;

};

这里的问题是:如何实例化单例类并保持其构造函数私有?


编辑

(澄清)

我的意思是,我该怎么做:

template<class T> T* SingletonMixin<T>::instance = 0;
template<class T> T* SingletonMixin<T>::getInstance()
{
    if (instance == 0)
    {
        instance = T();
    }
    return instance;
};

但使用私有 T 构造 T()


谢谢!

4

3 回答 3

1

问题:如果您将(反)构造函数设为私有,则 Singleton 基类无法生成实例。

然而:

friend class SingletonMixin<Foo>;

是你的朋友。

于 2010-08-15T15:12:31.763 回答
0

单例和继承非常糟糕地混合在一起。这是因为关于 Singleton 的基本陈述是:“这个类只能有一个实例”,而子类的存在意味着至少存在不同实例的可能性。您几乎肯定应该重构它以使这四个类不是单例。

于 2010-08-17T20:34:51.627 回答
0

以下不起作用吗?

class Foo : public SingletonMixin<Foo>
{
};
于 2010-08-15T15:06:24.723 回答