網站首頁 編程語言 正文
前言
之前已經寫過兩篇博客關于單例類的寫法:
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
相關推薦
- 2022-11-10 pytorch人工智能之torch.gather算子用法示例_python
- 2022-03-26 Android?Studio中Logcat寫入和查看日志_Android
- 2023-07-18 SpringBoot中線程池初始化,并且可配置線程池參數
- 2022-03-26 正則表達式詳析+常用示例_正則表達式
- 2023-11-17 Python 如何獲取線程的返回值
- 2022-09-19 Python使用pytorch動手實現LSTM模塊_python
- 2024-03-06 Maven終端命令生成Spring-boot項目并輸出“helloworld“
- 2022-05-17 解析Go?中的?rune?類型_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支