如何在Qt 中实现单例模式

如何在Qt 中实现单例模式,第1张

QT的单例和其他都是一样的,都是把构造私有,提供访问的方法。郑渣

声明毁丛困

public:

static demo* instance()

private:

demo()

static demo*m_p

定义纤念

demo*demo::m_p= 0

demo*demo::instance()

{

if (!m_p)

{

m_p = new demo

}

return m_p

}

在windows下互斥体有个唯一的key,通过key去创建互斥体,如果这巧腔薯个互斥体已经存在了,那么通过GetLastError能获取到这个信息,表示程序已经在运行了。互斥体还有个优点圆裤就是在程序关闭时孝者,会自动释放掉!

#include "mainwindow.h"

#include <QApplication>

#include <windows.h>

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

QApplication a(argc, argv)

QString strKey = "mykey"

LPCWSTR wstrKey = strKey.toStdWString().c_str()

HANDLE hMetex = CreateMutex(NULL,FALSE,wstrKey)

if(GetLastError() == ERROR_ALREADY_EXISTS){

//如果互斥体存在,说明程序已经有实例在运行了,释放资源然后关闭本实例

if(hMetex){

CloseHandle(hMetex)

hMetex = NULL

}

return -1

}

MainWindow w

w.show()

return a.exec()

}

单例模式就是 :

1、类的构造函数为private,即外部程序不能通过new关键桐橘字创建对象的实例

2、类中提供一个private static的 类变量引用 ;

3、单例类中提供静态方法 定义为 public static 的方法获取一个类的实例 ;

4、静态方法返回 类的乎配引用,即 第2点中的 私有 静态变量 。

私有静态变量可以 定义的时候初始化 ,也可以 在第一次使用的时候,即调用AA.getInstanc()方法中判断岁轮指 静态变量是否为空在初始化 。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12364162.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存