我尝试写一个单例类,这样一类只需要从中得到和自动单:基类如何可以禁用派生类的构造函数
基类:
template <class T>
class Singleton
{
private:
static T* instance;
public:
static T* getInstance(void)
{
if(!instance)
instance = new T;
return instance;
}
static void release(void)
{
if(instance)
{
delete instance;
instance = NULL;
}
}
};
template <class T>
T* Singleton<T>::instance = NULL;
我派生类:
#include <iostream>
#include "Singleton.h"
class MySingleton : public Singleton<MySingleton>
{
public:
void helloWorld(void)
{
printf("Hello, World!\n");
}
};
主:
int main(int argc, const char * argv[])
{
MySingleton* s = MySingleton::getInstance();
s->helloWorld();
return 0;
}
这很好,但它不是一个真正的单身人士,因为我仍然可以使用它的默认构造函数构造MySingleton。当然,我可以将MySingleton的ctors私有化,并将Singleton声明为朋友,但是我有什么办法可以在基类中做到这一点,所以只需派生并且不声明任何ctors就足以构成一个类Singleton?
这源于你可以使用基的构造函数的事实:http://liveworkspace.org/code/3iuwiB%242 – chris
是的,我可以声明Singleton私有的ctor ,但是编译器在“new T”出错。当然,MySingleton的构建也是不可能的,所以我很喜欢这个解决方案,如果它会编译:) – Pontomedon
是的,我也这么认为,应该有一种方法,除此之外(我也已经把它放到了问题中:)) – Pontomedon