只能创建一个对象
4.1 饥汉模式
只要一运行该对象就已经创建
class Object
{
private:
int value;
static Object obja;
private:
Object(int x=0):value(x){}
Object(const Object&)=delete;//C++11
Object& operator=(const Object&)=delete;
public:
~Object(){}
static Object& GetObj()//以引用返回
{
return obja;
}
};
Object Object::obja(10);
int main()
{
Object& objb=Object::GetObj();//ok,以引用接收
Object& objc=Object::GetObj();//ok
//objb和objc均为obja的别名
return 0;
}
4.2懒汉模式
在需要时才会创建该对象
class Object
{
private:
int value;
static Object* pobj;
private:
Object(int x=0):value(x){}
Object(const Object&)=delete;
Object& operator=(const Object&)=delete;
public:
~Object()
{
delete pobj;
}
static Object* GetPObj()//以指针返回
{
if(pobj==nullptr)
{
pobj=new Object(10);
}
return pobj;
}
};
Object Object::pobja=nullptr;
int main()
{
Object* pb=Object::GetPObj();//ok,以指针接收
Object& objc=*Object::GetPObj();//ok
return 0;
}