靜態變量的初始化問題
首先感謝孔雀的熱心回復,我首先承認看到這個問題后我思考了不到3分鐘就放棄了,也沒有認真去google(手里的事情太多)。我就沒抱希望的沒完沒了的給孔雀留言,尋思作者回復了是人家人品好,沒回復也是情理之中,畢竟大家都讀過how to ask,但孔雀給了我一個很大的意外,再次感謝。
原文地址:
http://www.shnenglu.com/kongque/archive/2010/02/28/108635.html
貼上我的一段測試代碼:


















































object_creator
instance
instance
本文我較生僻的是:Boost源碼,template的技巧,所以我只給出我對靜態函數和靜態變量的初始化的一些看法,錯誤的地方請指教!
首先
template <typename T>
typename Singleton<T>::object_creator
Singleton<T>::create_object;
這個初始化的語法就把我弄懵了,我拆開看了下
template <typename T> typename
Singleton<T>::object_creator // 這行是變量的類型
Singleton<T>::create_object; // 這行是變量的定義
文中的重點是在多線程的程序中如何確保每個線程得到的obj是自己想要的。明確的兩個概念是:
1,類的成員靜態變量在進入main之前已被初始化
2,函數內部的局部靜態變量在該函數第一次被調用時初始化,只初始化一次
所以該代碼首先執行的初始化create_object,調用其默認的無參構造函數,在構造函數中調用了instance,這個時候obj也被初始化了,所以在main中再顯式的調用instance時就直接得到了一個已經初始化了的obj了。
這樣做究竟是怎么達到線程安全的呢?
簡單來講就是不管是線程A,還是線程B調用instance,它們所調用的obj都是已經初始化好的obj,以前舊的做法
















posted on 2010-03-06 10:59 zuhd 閱讀(5037) 評論(6) 編輯 收藏 引用 所屬分類: c/c++