Qt-单例模式

SinglePara.h

#ifndef SINGLEPARA_H
#define SINGLEPARA_H
#include <QtGui>

class SinglePara
{
public:
    static SinglePara* getSinglePara();
public:
    SinglePara();
    static SinglePara *singles;
};
#endif // SINGLEPARA_H

SinglePara.cpp

#include "SinglePara.h"
SinglePara *SinglePara::singles = 0;

SinglePara::SinglePara()
{

}
//用来返回单例类的对象
SinglePara* SinglePara::getSinglePara()
{
    //if(single == 0)
    if(singles == NULL)
    {
        singles = new SinglePara();
    }
    return singles;
}

main.cpp

#include <QDebug>
//引用单例类
#include "SinglePara.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ...
    //实现
    //其他地方调用也是得到相同的地址
    SinglePara *sin = SinglePara::getSinglePara();
    //打印结果:如:0x54c068
    //每次运行的地址是不一样的
    qDebug()<<sin->singles; 
    ...
    return a.exec();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt一个跨平台的应用程序开发框架,通过使用 C++ 编程语言和 Qt 库,开发者可以很方便地进行应用程序的开发。Qt 提供了一系列的线程和同步机制,用于实现多线程编程。在多线程编程中,为了保证共享资源的安全性,我们经常需要使用加锁的方式来进行同步操作。 单例模式是一种设计模式,在一个程序中只能存在一个的对象实例Qt 中的单例模式通常用于全局共享资源的管理,比如日志记录器、数据库管理器等。 在 Qt 中实现单例模式时,为了保证线程安全,我们需要加锁来控制多线程间对单例对象的访问。Qt 提供了 QMutex 和 QMutexLocker 用于加锁。 QMutex 是一个互斥量,通过调用其 lock() 函数可以对资源加锁,这样其他线程就无法同时访问该资源。当线程完成对共享资源的操作后,需要调用 unlock() 函数来释放锁定。 使用 QMutex 加锁来实现单例模式的代码示例如下: ```cpp class Singleton { public: static Singleton* getInstance() { if (!m_instance) { QMutexLocker locker(&m_mutex); if (!m_instance) { m_instance = new Singleton(); } } return m_instance; } private: Singleton() {} static QMutex m_mutex; static Singleton* m_instance; }; QMutex Singleton::m_mutex; Singleton* Singleton::m_instance = nullptr; ``` 在 getInstance() 函数中,首先判断 m_instance 是否为空,如果为空,则使用 QMutexLocker 对象锁定 m_mutex,并再次检查 m_instance 是否为空。这样可以确保多个线程同时调用 getInstance() 函数时只有一个线程能够创建单例对象。 通过使用 QMutex 加锁来实现单例模式,可以保证在多线程环境下单例对象的安全性,避免了多线程访问带来的竞争问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值