您的位置:首页 > 其它

Singleton

2015-09-16 16:22 246 查看
#include <iostream>
class Person
{
private:
static Person *singlePerson;
Person()
{
std::cout<<"Create Person"<<std::endl;
}
~Person()
{
std::cout<<"Delete Person"<<std::endl;
}

class CGarInner{//用户无法直接delete这个单例,但是在程序的最后还是会释放
public:
CGarInner(){
std::cout<<"Create CGarInner"<<std::endl;
}
~CGarInner(){
if(Person::singlePerson)
{
delete Person::singlePerson;
Person::singlePerson = NULL;
}
}
};
static CGarInner CGarInst;

public:
static Person *defaultInst(){
if(Person::singlePerson==NULL)//双层判断,由于lock的开销略大
{
//lock
if(Person::singlePerson==NULL)
{
Person::singlePerson = new Person();
}
//unlock
}
return Person::singlePerson;
}
};

Person *Person::singlePerson = NULL;
Person::CGarInner Person::CGarInst;

int main(int argc, const char * argv[])
{

__unused Person *per1 = Person::defaultInst();
__unused Person *per2 = Person::defaultInst();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: