这如何迫使单身人士?

时间:2011-09-28 11:34:30

标签: c++ templates singleton

在某些代码中,我看到了单例模板

template<typename T>
class Singleton
{
public:
    Singleton(T& instance)
    {
        assert(!sfpInstance || (sfpInstance==&instance));
        sfpInstance = &instance;
    }
    static T& getInstance()
    {
        assert(sfpInstance);
        return *sfpInstance;
    }
private:
    static T*   sfpInstance;
};

和这样使用的类:

class MyClass : public Singleton<MyClass>
{
   protected:
      MyClass() : Singleton<MyClass>(*this) {}
}

我不知道如何将其用作单身人士?

如果可以使用它,使用它的正确方法是什么。

编辑:MyClass构造函数受到保护。

1 个答案:

答案 0 :(得分:1)

此代码根本不起作用,因为没有公开的MyClass构造函数,而且Singleton不是MyClass的朋友。

现在,如果MyClass构造函数/是/ public,MyClass构造函数的每次调用都会检查全局sfpInstance指针是否已指向某个对象,如果有,则触发断言。因此,在程序运行期间只能构造一个MyClass实例。请注意,此方法并不优雅,因为它不会跟踪MyClass单例实例的销毁。