Идея состоит в том, чтобы удалить Singleton в C ++ после завершения программы.Мы изучили этот метод реализации в классе:
class Singleton
{
private:
static Singleton* the_singleton;
protected:
Singleton()
{
static Keeper keeper(this);
/*CONSTRUCTION CODE*/
}
virtual ~Singleton()
{
/*DESTRUCTION CODE*/
}
public:
class Keeper
{
private:
Singleton* m_logger;
public:
Keeper(Singleton* logger):m_logger(logger){}
~Keeper()
{
delete m_logger;
}
};
friend class Singleton::Keeper;
static Singleton* GetInstance();
{
if (!the_singleton)
the_singleton = new Singleton();
return the_singleton;
}
};
Singleton* Singleton::the_singleton = NULL;
Идея состоит в том, что в первый раз, когда создается Singleton, статический объект Keeper будет создан в C'or Singleton, и как только программа завершитсятот Keeper будет уничтожен и, в свою очередь, уничтожит экземпляр Singleton, на который он указывает.
Теперь этот метод мне кажется довольно громоздким, поэтому я предложил отказаться от класса Keeper и сделать экземпляр Singleton aстатический объект метода getInstance:
<!-- language: c++ -->
class Singleton
{
protected:
Singleton()
{
/*CONSTRUCTION CODE*/
}
~Singleton()
{
/*DESTRUCTION CODE*/
}
public:
static Singleton &getInstance()
{
static Singleton instance;
return instance;
}
/*OBJECT FUNCTIONALITY*/
};
Таким образом, Singleton создается при первом вызове метода getInstance и уничтожается после завершения программы.Нет необходимости в этом классе хранителя.
Я проверил его, и он работал просто отлично - Синглтон был создан и уничтожен в нужных местах.Тем не менее, мой ТА сказал, что эта схема неверна, хотя он не мог вспомнить, что именно было с ней.Поэтому я надеюсь, что кто-то здесь уже сталкивался с этой реализацией и может сказать мне, что с ней не так.