在某些代码中,我看到了单例模板
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构造函数受到保护。
答案 0 :(得分:1)
此代码根本不起作用,因为没有公开的MyClass构造函数,而且Singleton不是MyClass的朋友。
现在,如果MyClass构造函数/是/ public,MyClass构造函数的每次调用都会检查全局sfpInstance指针是否已指向某个对象,如果有,则触发断言。因此,在程序运行期间只能构造一个MyClass实例。请注意,此方法并不优雅,因为它不会跟踪MyClass单例实例的销毁。