Я пытаюсь реализовать этот синглтон-класс. Но я столкнулся с этой ошибкой:
'Singleton :: ~ Singleton': не может получить доступ к закрытому члену, объявленному в классе 'Singleton'
Это помечено в заголовочном файле, последняя строка которого содержит закрывающую скобку.
Может кто-нибудь помочь мне объяснить причину этой проблемы?
Ниже мой исходный код.
Singleton.h:
class Singleton
{
public:
static Singleton* Instance()
{
if( !pInstance )
{
if( destroyed )
{
// throw exception
}
else
{
Create();
}
}
return pInstance;
}
private:
static void Create()
{
static Singleton myInstance;
pInstance = &myInstance;
}
Singleton() {}
Singleton( const Singleton& );
Singleton& operator=( const Singleton& );
~Singleton()
{
pInstance = 0;
detroyed = false;
}
static Singleton* pInstance;
static bool destroyed;
};
Singleton.cpp:
Singleton* Singleton::pInstance = 0;
bool Singleton::destroyed = false;
Внутри моей основной функции:
Singleton* s = Singleton::Instance();
Если я сделаю деструктор открытым, то проблема исчезнет. Но в книге (Modern C ++ Design) говорится, что она должна быть закрытой, чтобы пользователи не могли удалить экземпляр. Мне действительно нужно поместить некоторый код для очистки для pInstance и уничтожить внутри деструктора.
Кстати, я использую Visual C ++ 6.0 для компиляции.