【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;//程序一开始就创建

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

相关内容

热门资讯

〖推荐一款〗同城游跑胡子可以开... 您好:【同城游跑胡子】这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4579337】很多玩家在...
今日分享|乐斗小院有透视脚本科... 您好:乐斗小院这款游戏可以开挂,确实是有挂的,需要软件加微信【9503776】,很多玩家在乐斗小院这...
重大通报“新世界拼三张怎么装挂... 您好:新世界拼三张这款游戏可以开挂,确实是有挂的,需要软件加微信【3685448】,很多玩家在新世界...
今日重大通报“齐泰互娱挂操作教... 您好:齐泰互娱这款游戏可以开挂,确实是有挂的,需要软件加微信【3892241】,很多玩家在齐泰互娱这...
重大通报“星耀视界确实可以开挂... 您好:星耀视界这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8383742】很多玩家在这款游戏...