单例对象的构造函数与析构函数的调用时机
以下是一个单例类, 该类的构造函数与析构函数具体是在什么时候
会执行到呢?
class test
{
public:
static test& instance()
{
return sInstance;
}
private:
static test sInstance;
};
[解决办法]
这是设计模式里的一种创建型模式(Singleton)
它的意图在于----保证一个类仅有一个实例,并提供一个访问它的全局访问点。
在以下情况可以使用这种模式:
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2、当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
举例如下:
class Singleton{
static Singleton* _instance;
protected:
Singleton();
public:
static Singleton* Instance();
};
Singleton* Singleton::_instance=0;
Singleton* Singleton::Instance(){
if(0==_instance){
_instance=new Singleton;
}
return _instance;
}
由以上代码可见,客户仅通过Instance成员函数访问这个单件。变量_instance初始化为0,而静态成员函数Instance返回该变量值,如果其值为0则用唯一实例初始化它。 Instance使用惰性初始化;它的返回值直到被第一次访问时才创建和保存。注意构造器是保护型的。试图直接实例化Singleton的客户将得到一个编译时的错误信息。这就保证了仅有一个实例可以被创建。
[解决办法]
这个啊,还是看《Modern C++ Design》吧,那是对单件讲得最多的一个书了。