#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;
}
Singleton
最新推荐文章于 2024-07-16 23:43:04 发布