c++实现单例


单例宏:

复制代码
//单件定义宏
//-------------------------------------
//  在头文件中申明
//    DECLARE_SINGLEOBJ( CSampleClass ) ;
//    在CPP文件中定义静态变量
//    IMPLEMENT_SINGLEOBJ( CSampleClass ) ;
//    注意单件的getInstance为非线程安全,
//  最好是在主线程初始化的时候调用一次
//-------------------------------------
#define DECLARE_SINGLEOBJ(type)        \
public:    \
    static type* m_instance ;\
    static type* getInstance(){\
        if( NULL == m_instance ){\
            m_instance = new type() ;\
        }\
        return m_instance ;\
    };\
    static void release(){\
        if( m_instance){\
            delete m_instance ;\
            m_instance = NULL ;\
        }\
    };

#define IMPLEMENT_SINGLEOBJ(type) \
    type* type::m_instance = NULL ;
复制代码

 

一个实例:

复制代码
class CNetServer
{
protected:
    CNetServer() ;
    ~CNetServer() ;

    DECLARE_SINGLEOBJ( CNetServer )

public:
    //启动net server
    bool                        StartServer( char *addr , unsigned short port ) ;
    //ping 消息的处理
    void handlePing( ) ; }
复制代码

 

应用:

复制代码
void *CNetServer::pingThreadProc( void *pObj )
{
.................        
    while( true )
    {
        CNetServer::getInstance()->handlePing( ) ;
..................
    }

    return 0 ;
}
复制代码

 

posted @   oucaijun  阅读(258)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2014-11-14 c++, 虚基派生 : 共同基类产生的二义性的解决办法
2014-11-14 c++,命名空间(namespace)
下载TeamViewer完整版 下载TeamViewer
点击右上角即可分享
微信分享提示