青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

focus on linux, c/c++, lua

靜態變量的初始化問題

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

#include "stdafx.h"
template 
<typename T>
struct Singleton
{
     
struct object_creator
    
{
            object_creator()
            

                printf(
"object_creator\n");
                Singleton
<T>::instance(); 
            }

            inline 
void do_nothing()const {}
    }
;
     
static object_creator create_object;
    
public:
    typedef T object_type;
    
static object_type& instance()
    
{
            printf(
"instance\n");
            
static object_type obj;
            create_object.do_nothing();
            
return obj;
    }

       
}
;

template 
<typename T>
typename Singleton
<T>::object_creator
Singleton
<T>::create_object;


int _tmain(int argc, _TCHAR* argv[])
{    
    
int sint = Singleton<int>::instance();
    getchar();
    
return 0;
}
打印結果
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,以前舊的做法
class Foo
{
 
public:
     
static Foo& getSingleton()
      
{
          
static Foo foo;
          
return foo;
      }

  
 
private:
     Foo();
 }
;
如果A線程先調用了getSingleton(),那么B再調用的時候,得到的是按照A的想法初始化過的foo了(盡管沒什么差別,因為沒有參數),那么這個foo也許就不是B想要的了。

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

評論

# re: 靜態變量的初始化問題 2010-03-06 11:38 孔雀

彼此彼此,相得益彰吧。  回復  更多評論   

# re: 靜態變量的初始化問題 2010-03-06 15:22 David Fang

確實,在多線程的時候腦袋是需要多根弦  回復  更多評論   

# re: 靜態變量的初始化問題 2010-03-06 23:09 Benjamin

首先類是個數據類型,其次,在類的靜態方法里只能使用類的靜態成員變量。
另外類的靜態變量初始化的順序是定義的順序。
用時 ,我們只要能保證它能正確的初始化就可以。在多線程中應用也遵循這樣的原則  回復  更多評論   

# re: 靜態變量的初始化問題 2010-03-07 12:48 小蘇

1,類的成員靜態變量在進入main之前已被初始化

我覺得這個結論應該是不正確的吧?
不信你把main第一行代碼注釋了看,打印結果.

int _tmain(int argc, _TCHAR* argv[])
{
//int sint = Singleton<int>::instance();
getchar();
return 0;
}  回復  更多評論   

# re: 靜態變量的初始化問題 2010-03-07 18:02 zuhd

@小蘇
class CTest1
{
public:
CTest1()
{
printf("init\n");
}
};

class CTest2
{
public:
static CTest1 m_test;
};

CTest1 CTest2::m_test;

這段代碼按道理講是和上面的代碼功能類似的,
這段是可以打印出來的。
至于上面那段為什么沒有打印,
思考中(難道模板必須要實例化才能成為有效代碼??),期待高手解答  回復  更多評論   

# re: 靜態變量的初始化問題 2011-06-13 16:44 liang

@zuhd
確實是這樣子的
我正在找解決方案
不想要這個特性  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲天堂av高清| 亚洲综合好骚| 欧美ed2k| 欧美成人免费在线| 日韩视频二区| 一区二区欧美视频| 国产精品女人久久久久久| 亚洲一区二区三区视频| 亚洲四色影视在线观看| 欧美mv日韩mv国产网站app| 欧美亚洲在线| 黄色成人免费网站| 免费短视频成人日韩| 美女脱光内衣内裤视频久久影院| 最新国产精品拍自在线播放| 亚洲区欧美区| 国产精品v日韩精品| 欧美在线视频全部完| 久久久久国产精品www| 亚洲精品在线电影| 亚洲——在线| 亚洲国产日韩欧美综合久久| 日韩一区二区久久| 国产亚洲精品aa午夜观看| 麻豆国产精品一区二区三区| 欧美理论电影在线播放| 性久久久久久久久久久久| 久久精品免费| 亚洲永久视频| 另类图片国产| 亚洲在线视频网站| 久久久久久久久岛国免费| 一本大道久久a久久精二百| 午夜欧美理论片| 一区二区欧美在线| 久久久精品日韩欧美| 亚洲午夜精品在线| 麻豆精品一区二区av白丝在线| 亚洲一区三区电影在线观看| 久久综合婷婷| 久久久久成人精品免费播放动漫| 欧美美女bbbb| 欧美大片在线看| 国产日韩欧美夫妻视频在线观看| 亚洲区中文字幕| 精品91久久久久| 亚洲香蕉伊综合在人在线视看| 亚洲日产国产精品| 久久久91精品国产一区二区三区 | 欧美连裤袜在线视频| 久久99在线观看| 欧美日韩亚洲高清| 91久久亚洲| 亚洲成人在线视频播放| 性色av一区二区三区| 亚洲丝袜av一区| 欧美人与性动交α欧美精品济南到| 另类专区欧美制服同性| 国产精品一区二区a| 一区二区福利| 在线亚洲国产精品网站| 欧美99久久| 亚洲国产日韩欧美一区二区三区| 黄网站免费久久| 久久久久国产一区二区三区| 久久gogo国模裸体人体| 国产精品中文字幕欧美| 亚洲视频在线观看| 亚洲女与黑人做爰| 国产精品久久久久99| 亚洲视频免费| 欧美一区在线看| 国产欧美一区二区三区另类精品 | 久久国产精品72免费观看| 午夜一区在线| 国产日韩久久| 久久国产精品久久久| 久久一区激情| 亚洲国产一区二区三区在线播| 裸体丰满少妇做受久久99精品| 男男成人高潮片免费网站| 亚洲高清不卡av| 欧美激情亚洲| 一区二区三区国产精华| 性亚洲最疯狂xxxx高清| 韩日精品视频一区| 乱中年女人伦av一区二区| 亚洲欧洲综合| 性色av一区二区三区红粉影视| 国产欧美va欧美va香蕉在| 久久久久久久久蜜桃| 亚洲国产精品电影| 亚洲欧美精品在线| 国产专区欧美精品| 免费欧美在线视频| 亚洲一级在线观看| 免费视频亚洲| 亚洲无线视频| 韩国av一区二区三区| 欧美—级a级欧美特级ar全黄| 正在播放亚洲一区| 模特精品在线| 亚洲欧美日韩国产成人| 在线观看一区二区视频| 欧美日韩日本国产亚洲在线| 欧美亚洲免费| 日韩亚洲一区二区| 久久亚洲视频| 亚洲综合清纯丝袜自拍| 在线观看欧美亚洲| 国产精品乱人伦中文| 久久亚洲精品视频| 亚洲一区精品在线| 亚洲国产1区| 久久久久看片| 亚洲欧美在线磁力| 亚洲人成在线播放| 国产一区二区三区直播精品电影| 欧美日韩免费视频| 久久天堂国产精品| 亚欧成人在线| 一个色综合导航| 亚洲国产欧美精品| 你懂的国产精品永久在线| 亚洲免费影院| 一区二区三区精品国产| 亚洲高清视频在线| 国内精品久久久久久| 国产精品美女一区二区| 欧美日韩少妇| 欧美精品电影| 美女视频黄a大片欧美| 欧美在线播放高清精品| 亚洲欧美一区二区视频| 一区二区三区四区蜜桃| 亚洲精选中文字幕| 亚洲高清视频的网址| 久久综合色一综合色88| 久久久午夜精品| 久久精品一区二区三区不卡牛牛 | 久久xxxx精品视频| 中文精品视频一区二区在线观看| 亚洲精品色图| 亚洲日本va午夜在线影院| 在线免费日韩片| 亚洲成色999久久网站| 在线精品视频一区二区| 精品99一区二区| 国外成人免费视频| 狠狠色香婷婷久久亚洲精品| 好看的日韩视频| 在线精品观看| 日韩天堂av| 亚洲永久网站| 久久av免费一区| 久久综合九色综合欧美狠狠| 猫咪成人在线观看| 欧美高潮视频| 亚洲精品国产无天堂网2021| 99国产精品久久久久久久| 这里只有视频精品| 午夜精品网站| 久久综合99re88久久爱| 欧美精品久久久久久久| 欧美日韩亚洲一区二区| 国产精品网站在线播放| 国产一区二区成人| 亚洲黄色在线看| 亚洲素人一区二区| 久久久久久91香蕉国产| 欧美大胆成人| 宅男噜噜噜66一区二区66| 欧美一级午夜免费电影| 久久久欧美精品| 欧美日韩国产在线播放网站| 国产精品区一区二区三区| 伊人精品视频| 亚洲一区欧美二区| 男同欧美伦乱| 一区二区激情| 乱中年女人伦av一区二区| 国产精品va在线播放| 国产在线精品一区二区夜色| 亚洲乱码国产乱码精品精天堂| 香蕉国产精品偷在线观看不卡| 久热精品视频在线| 中国女人久久久| 久久影视精品| 国产欧美日韩亚洲精品| 亚洲精品偷拍| 久久一区二区三区av| 一本色道久久88精品综合| 久久女同精品一区二区| 国产精品久久久久久久久久久久| 亚洲国产岛国毛片在线| 亚洲综合好骚| 亚洲精品视频一区| 久久一日本道色综合久久| 国产精品一区二区欧美| 亚洲精品一区久久久久久|