日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++單例類宏定義,方便快速實現單例類

作者:luoyayun361 更新時間: 2022-05-15 編程語言

前言

之前已經寫過兩篇博客關于單例類的寫法:
Qt C++單例類寫法

C++設計模式–單例模式(Singleton)及單例通用模板

今天再加個菜,通過宏定義,用更簡單的方式來實現單例類。使用非常方便。

正文

話不多說,直接上代碼,定義一個頭文件,singleton.h

#pragma once

/*
 * @brief   :定義單例類宏
 */


#include 

#define DISABLE_COPY(Class) \
    Class(const Class&) = delete; \
    Class& operator=(const Class&) = delete;

#define SINGLETON_DECL(Class) \
    public: \
        static Class* instance(); \
        static void exitInstance(); \
    private: \
        DISABLE_COPY(Class) \
        static Class* s_pInstance; \
        static std::mutex s_mutex;

#define SINGLETON_IMPL(Class) \
    Class* Class::s_pInstance = NULL; \
    std::mutex Class::s_mutex; \
    Class* Class::instance() { \
        if (s_pInstance == NULL) { \
            s_mutex.lock(); \
            if (s_pInstance == NULL) { \
                s_pInstance = new Class; \
            } \
            s_mutex.unlock(); \
        } \
        return s_pInstance; \
    } \
    void Class::exitInstance() { \
        s_mutex.lock(); \
        if (s_pInstance) {  \
            delete s_pInstance; \
            s_pInstance = NULL; \
        }   \
        s_mutex.unlock(); \
    }

使用方法:
在需要定義單例的類里面,添加如下

頭文件

class Aclass
{
    SINGLETON_DECL(Aclass)

public:
    Aclass();
    ....
};

源文件頂部:

SINGLETON_IMPL(Aclass)

然后可以在頭文件中定義一個宏,方便調用

#define g_aclass Aclass::instance()

這樣就可以直接通過g_aclass 調用啦。這種方式使用起來更加便捷,需要的可供參考。

原文鏈接:https://luoyayun361.blog.csdn.net/article/details/124756938

欄目分類
最近更新