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 ;

 

一個實例:spa

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 ;
}
相關文章
相關標籤/搜索