(七)boost庫之單例類

2021-07-10 12:25:21 字數 2129 閱讀 9438

一、boost.serialzation的單件實現

單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例類的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。

單例,通常在乙個大型專案中單例是非常常見的,boost庫沒有提供專門的單例類,但可以在其它庫中找到他的實現

#include
class threadpoll : public boost::serialization::singleton
;

當然,你也可以不使用繼承的方式,只需要typedef一下,就可以得到乙個全域性訪問點,這種方式會更加的靈活。

class threadpoll
;
typedef boost::serialization::singletonthreadpollagent;

簡單示例:

#include #include class man

void setage(int page)

private:

int m_age;

};typedef boost::serialization::singletonfirstman;

int main()

t* operator->()
private:
t* m_guardptr;
};
//監視類,用於監視單例的狀態
template

};
template

//單例
template

class singleton : public boost::noncopyable
static

const t & get_const_instance()

private:
static t & instance;
static

void use(t const &) {}

static t & get_instance()
static boost::mutex m_signalmutex;
protected:
boost::mutex::scoped_lock scopedlock()
};
template

boost::mutex singleton< t >::m_signalmutex;
template

t & singleton< t >::instance = singleton< t >::get_instance();
#endif //__singleton_h__

該類參考boost單件的實現,使用上相似,但get_mutable_instance返回的不是例項物件,而是儲存該例項指標的乙個臨時變數,通過定義->符號訪問例項的函式,離開該作用域時,臨時變數析構,

自行解鎖。通過該單例訪問的所有函式都將已加鎖的形式進行訪問,如果想在不加鎖的情況下訪問,只能通過get_const_instance獲取例項的方式訪問。

你可以像下面這樣使用:

class threadpoll
;
int query()const{};
};
typedef singletonthreadpollagent;
threadpollagent::get_mutable_instance()->update();
threadpollagent::get_const_instance().query();

Python簡化類例七 單例類的寫法

前言 這是我自己想出來的方法,我不知道是否有人用過這種寫類的方法,我也沒想出乙個什麼樣名字來稱呼它,反正我叫它簡化類 之所以稱之為簡化類,是因為我沒辦法實現多重繼承,但類的基本繼承,重寫還是實現了的 python簡化類例七 單例類的寫法 def classtest7 單例類寫法挺簡單的,最後把函式變...

(七)單例模式

單例模式是指的什麼意思?那麼,要實現單例模式,有幾個要點 單例模式的應用場景有哪幾個呢?public class singleton 最後,需要有乙個共有的,靜態方法 這個方法,負責建立唯一的例項,並且返回這個唯一的例項 必須考慮到可能會出現的多執行緒併發訪問安全的問題 就是說,可能會有多個執行緒同...

iOS之單例類一

1.單例模式的要點 顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。2.單例模式的優點 1.例項控制 singleton 會阻止其他物件例項化其自己的 singleton 物件的副本,從而確保所有物件都訪問唯一例項。2.靈活性 因...