クラスがそれから派生するだけで自動的にシングルトンになるように、シングルトン クラスを作成しようとしています。
基本クラス:
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 をフレンドとして宣言することはできますが、基本クラスでそれを行う方法はありますか?