單例模式c++

一般用鎖配合double check即可。

class singleton
{
public:
    ~singleton();

    static singleton* get_instance();
    
private:
    singleton();
    singleton(const singleton& emg);
    singleton& operator = (const singleton& emg);
    void destroy();

    static singleton* instance_;
    static boost::mutex mutex_;
    
};// class singleton


singleton* singleton::instance_ = NULL;
boost::mutex singleton::mutex_;

singleton* singleton::get_instance()
{
    if(instance_ == NULL)
    {
        boost::mutex::scoped_lock lock(mutex_);
        if(instance_ == NULL)
        {
            instance_ = new singleton();
        }
    }
    return instance_;
}

一般情況下,一個進程中只存在一個實例且其生存期與進程相同,但偶爾也會有這樣的情況,即這個實例偶爾需要析構,然後又重新獲得,這個

時候就需要在析構函數中將instance_ = NULL,如果是智能指針也需要reset一下,因爲第二次重新獲得實例後,需要判斷這個instance_是否爲

NULL,而第一次獲得的實例析構後就需要確保instance_ == NULL.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章