在工作中遇到不少情況使用singleton模式,下面採用的是最簡單的一種形式:
1class
foo2910
private:11
foo();
12};
這種實現,在單執行緒情況下,簡單而有效。
對於執行緒安全的singleton的實現,網上有不少討論。這兩天看到boost庫中的一種實現,沒有使用鎖機制,而是充分利用了c++的語言特性較好的解決了多執行緒情況下使用singleton的問題。
boost的singleton的實現基於以下假設:良好的設計在進入main函式之前應該是單執行緒的。
我們可以使用全域性變數的方式來設計singleton,並且保證在使用該singleton之前其已經被正確的初始化,如何做到?且看**:
1template
<
typename t
>
2struct
singleton37
inline
void
do_nothing()
const{}8
};910static
object_creator create_object;
1112
public:13
typedef t object_type;
14static
object_type
&instance()
1520
21};
漂亮而巧妙的實現。
但是上面的實現還是有一點小的缺憾,那就是只能呼叫類的預設建構函式,不能呼叫帶引數的建構函式。
singleton中的陷阱
單件模式應該是設計模式中運用得最多的模式之一,對於全域性性的復用性的物件我們通常會採用單件模式,正是因為單件這種頻繁運用的看似簡單的模式前段時間在我們的專案中卻引發了乙個致命性的崩潰bug,因此在這裡總結一下,希望能給大家有所幫助。所謂單件模式就是在整個程序執行期間只需要例項化一次為所有執行執行緒公...
boost中serialization模組的單體類
singleton.cpp 定義控制台應用程式的入口點。boost實現單體的兩種方式 1.通過boost的pool的singleton實現 2.通過boost的serialization的singleton實現,採用繼承或則定義乙個單體型別 而且serilization模組的單體類具備鎖功能。inc...
C 中的 Singleton 實現
ansi c 中的 singleton 實現說難不難,說容易也不容易,很多人寫 ansi c 的 singleton class 都有錯誤。這篇文章討論怎樣在 ansi c 中寫 singleton class,希望對大家有幫助。設計模式 中把 singleton 寫成返回指標 class sing...