【C++】单例模式——只能创建一个对象
创始人
2025-05-31 21:37:21

单例模式是常用的软件设计模式,包含一个被称为单例的特殊类。通过单例模式保证系统中一个类只有一个实例(对象),而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。

定义一个单例类

因为只能有一个对象,所以在外界不能新创建对象,创建对象需要调用构造函数,可以将构造函数设为private或protected;

又因为有一个对象,将这个对象在类内部创建,用一个接口调用

因为外部无法创建对象调用,所以要设计成static类型,可以直接用类类型调用

class A
{
protected:A() { cout << "A" << endl; }A(const A&) = delete;//删拷贝构造
public:A& operator = (const A& a) = delete;//删赋值static A& fn()//对象调用接口{static A a;return a;}
};void main()
{A& b = A::fn();A& bb = A::fn();//b和bb是同一个对象//  A* p = (A*)malloc(sizeof(A));//    *p = b;
}

1.将构造函数定义private或protected

2.static成员函数不需要对象调用, 里面没有隐含的this

3.如果要求只能创建一个对象,则要将删除拷贝构造还有赋值

静态成员函数用引用返回

还可以把唯一的对象不放在接口里面创建:

方法一:

class A
{
private:A(){};static A* getInstance()        {if(a==NULL){a = new A;}return a;    }
private:static A*a;
}
A* A::a = NULL;//类外初始化,使用时才初始化调用

方法二:

class A
{
private:A(){};static A* getInstance()        {return a;    }
private:static A*a;
}
A* A::a = new A;//程序一开始就创建

程序结束自动释放对象,不能提供释放的接口,否则唯一的对象都没有了。

相关内容

热门资讯

你们四川人的嘴太严了 你究竟还藏了多少秘密?听说斯基在乐山,波旁斯基张口就来:乐山美食经济三驾马车:甜皮鸭、跷脚牛肉和钵钵...
海南板块大幅高开 12月23日早盘,海南板块大幅高开,海峡股份、海汽集团、海南发展、海南瑞泽涨停,康芝药业、海南机场、...
化工品轮番涨价 高端产能有序扩... 近期MDI、碳酸锂等化工品轮番涨价,涨价潮驱动化工板块表现活跃。其中,在能源成本、运输成本与环保压力...
150欧元的刀终于刺向中国跨境... 出品|虎嗅商业消费组作者|周月明编辑|苗正卿题图|视觉中国欧盟这次终于把“刀”真正落在了跨境小包上。...
瑞幸不想困在9块9 本文来自微信公众号:山上,作者:何简,编辑:王彬,题图来自:视觉中国中国最大的连锁咖啡品牌瑞幸咖啡正...