zoukankan      html  css  js  c++  java
  • Qt实现通用模板单例

    #include <QAtomicPointer>

    #include <QMutex>

    #include <memory>

     #include <stdlib.h>

    using namespace std;

    template <class T>

    class QSingleTon

    {

    public:

      static T* instance(QObject* parent = 0)

      {

    #ifdef Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE

        if(!QAtomicPointer<T>::isTestAndSetNative())

    #endif

        {

          QMutexLocker locker(&mutex);

          if(m_pInstance.testAndSetOrdered(0,0))

          {

            m_pInstance.testAndSetOrdered(0,new T(parent));

            atexit(deinstance);

          }

        }

        return m_pInstance;   

      }

      static void deinstance()

      {

        if(m_pInstance != NULL)

        {

          delete m_pInstance;

          m_pInstance = NULL;

        }

      }

    private:

      QSingleTon(){}

      QSingleTon(const QSingleTon & );

      QSingleTon & operator = (const QSingleTon & );

    private:

      static QMutex mutex;

      static QAtomicPointer<T> m_pInstance;

    }

    template <class T> QMutex QSingleTon<T>::mutex;

    template <class T> QAtomPointer<T> QSingleTon<T>::m_pInstance = NULL;

    #endif

  • 相关阅读:
    直接插入排序
    归并排序
    正则问题
    九宫重排
    java合并两个集合并通过stream流构建响应结果
    企业微信扫码登录
    docker安装es
    docker安装nacos随记
    解决docker安装mysql8.0无法远程连接问题
    java分析工具10:jvm测试与调优
  • 原文地址:https://www.cnblogs.com/zhangnianyong/p/12370409.html
Copyright © 2011-2022 走看看