以下是一个我经常见到的实现单例模式的小例子:
我对这个问题的主要担忧是我的单例模式的析构函数没有被调用。
我可以改成使用(C++0x?)shared_ptr 的实例,这个方法很有效,但问题在于我的析构函数必须是公开的。
我可以添加一个静态的 'cleanup' 方法,但这会打开用户出错的可能性(即忘记调用它)。而且在面对(未处理的)异常时也不能进行适当的清理。
有没有一种常见的策略/模式,可以实现延迟实例化,自动调用析构函数,并仍然允许我保持析构函数私有?
#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;
}
我对这个问题的主要担忧是我的单例模式的析构函数没有被调用。
我可以改成使用(C++0x?)shared_ptr 的实例,这个方法很有效,但问题在于我的析构函数必须是公开的。
我可以添加一个静态的 'cleanup' 方法,但这会打开用户出错的可能性(即忘记调用它)。而且在面对(未处理的)异常时也不能进行适当的清理。
有没有一种常见的策略/模式,可以实现延迟实例化,自动调用析构函数,并仍然允许我保持析构函数私有?