【发布时间】:2012-12-24 18:03:16
【问题描述】:
我尝试编写一个单例类,这样一个类只需要从它派生并自动成为单例:
基类:
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 的 ctor 设为私有并将 Singleton 声明为朋友,但是我有什么办法可以在基类中做到这一点,因此仅派生而不声明任何 ctor 就足以使类单例?
【问题讨论】:
-
这源于你可以使用base的构造函数:liveworkspace.org/code/3iuwiB%242
-
是的,我可以将 Singleton 的 ctor 声明为私有,但随后编译器在“new T”处出错。当然,MySingleton 的构建也是不可能的,所以我非常喜欢这个解决方案,如果它可以编译:)
-
是的,我也这么认为,除此之外应该有办法(我也已经把它放到了问题中:))
-
那将是我在再次发布罢工之前无法正确阅读内容:p
-
我想你要找的词是
protected
标签: c++ templates inheritance singleton