Следующий небольшой пример реализует шаблон синглтона, который я видел много раз:
#include <iostream>
class SingletonTest {
private:
SingletonTest() {}
static SingletonTest *instance;
~SingletonTest() {
std::cout << "Destructing!!" << std::endl;
}
public:
static SingletonTest *get_instance() {
if(!instance) instance = new SingletonTest;
return instance;
}
};
SingletonTest *SingletonTest::instance = 0;
int main(int argc, char *argv[]) {
SingletonTest *s = SingletonTest::get_instance();
return 0;
}
Основная проблема, с которой я столкнулся, заключается в том, что деструктор моего синглтона никогда не вызывается.
Вместо этого я могу сделать instance
a (c ++ 0x?) shared_ptr
, что хорошо работает - за исключением того, что это означает, что мой деструктор должен быть публичным.
Я мог бы добавить статическую очисткуметод, но это открывает возможность ошибки пользователя (т. е. забыть вызвать его).Это также не позволило бы выполнить надлежащую очистку перед лицом (необработанных) исключений.
Существует ли общая стратегия / шаблон, который позволит выполнять ленивую реализацию, «автоматически» вызывать мой деструктор и все же позволять мне сохранятьчастный деструктор?