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

focus on linux, c/c++, lua

靜態(tài)變量的初始化問(wèn)題

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

#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;
}
打印結(jié)果
object_creator
instance
instance
本文我較生僻的是:Boost源碼,template的技巧,所以我只給出我對(duì)靜態(tài)函數(shù)和靜態(tài)變量的初始化的一些看法,錯(cuò)誤的地方請(qǐng)指教!
首先
template <typename T>
typename Singleton<T>::object_creator
Singleton<T>::create_object;
這個(gè)初始化的語(yǔ)法就把我弄懵了,我拆開(kāi)看了下
template <typename T> typename
Singleton<T>::object_creator   // 這行是變量的類(lèi)型
Singleton<T>::create_object;   // 這行是變量的定義
文中的重點(diǎn)是在多線程的程序中如何確保每個(gè)線程得到的obj是自己想要的。明確的兩個(gè)概念是:
1,類(lèi)的成員靜態(tài)變量在進(jìn)入main之前已被初始化
2,函數(shù)內(nèi)部的局部靜態(tài)變量在該函數(shù)第一次被調(diào)用時(shí)初始化,只初始化一次
所以該代碼首先執(zhí)行的初始化create_object,調(diào)用其默認(rèn)的無(wú)參構(gòu)造函數(shù),在構(gòu)造函數(shù)中調(diào)用了instance,這個(gè)時(shí)候obj也被初始化了,所以在main中再顯式的調(diào)用instance時(shí)就直接得到了一個(gè)已經(jīng)初始化了的obj了。
這樣做究竟是怎么達(dá)到線程安全的呢?
簡(jiǎn)單來(lái)講就是不管是線程A,還是線程B調(diào)用instance,它們所調(diào)用的obj都是已經(jīng)初始化好的obj,以前舊的做法
class Foo
{
 
public:
     
static Foo& getSingleton()
      
{
          
static Foo foo;
          
return foo;
      }

  
 
private:
     Foo();
 }
;
如果A線程先調(diào)用了getSingleton(),那么B再調(diào)用的時(shí)候,得到的是按照A的想法初始化過(guò)的foo了(盡管沒(méi)什么差別,因?yàn)闆](méi)有參數(shù)),那么這個(gè)foo也許就不是B想要的了。

posted on 2010-03-06 10:59 zuhd 閱讀(5061) 評(píng)論(6)  編輯 收藏 引用 所屬分類(lèi): c/c++

評(píng)論

# re: 靜態(tài)變量的初始化問(wèn)題 2010-03-06 11:38 孔雀

彼此彼此,相得益彰吧。  回復(fù)  更多評(píng)論   

# re: 靜態(tài)變量的初始化問(wèn)題 2010-03-06 15:22 David Fang

確實(shí),在多線程的時(shí)候腦袋是需要多根弦  回復(fù)  更多評(píng)論   

# re: 靜態(tài)變量的初始化問(wèn)題 2010-03-06 23:09 Benjamin

首先類(lèi)是個(gè)數(shù)據(jù)類(lèi)型,其次,在類(lèi)的靜態(tài)方法里只能使用類(lèi)的靜態(tài)成員變量。
另外類(lèi)的靜態(tài)變量初始化的順序是定義的順序。
用時(shí) ,我們只要能保證它能正確的初始化就可以。在多線程中應(yīng)用也遵循這樣的原則  回復(fù)  更多評(píng)論   

# re: 靜態(tài)變量的初始化問(wèn)題 2010-03-07 12:48 小蘇

1,類(lèi)的成員靜態(tài)變量在進(jìn)入main之前已被初始化

我覺(jué)得這個(gè)結(jié)論應(yīng)該是不正確的吧?
不信你把main第一行代碼注釋了看,打印結(jié)果.

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

# re: 靜態(tài)變量的初始化問(wèn)題 2010-03-07 18:02 zuhd

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

class CTest2
{
public:
static CTest1 m_test;
};

CTest1 CTest2::m_test;

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

# re: 靜態(tài)變量的初始化問(wèn)題 2011-06-13 16:44 liang

@zuhd
確實(shí)是這樣子的
我正在找解決方案
不想要這個(gè)特性  回復(fù)  更多評(píng)論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品成人一区| 亚洲素人在线| 欧美日韩国产精品一区| 久久精品91| 亚洲欧美日韩专区| 亚洲欧美日韩天堂| 欧美一区二区三区在线播放| 久久国产精品72免费观看| 久久精品99国产精品| 另类综合日韩欧美亚洲| 欧美精品乱码久久久久久按摩| 欧美不卡一卡二卡免费版| 欧美日本在线观看| 国产酒店精品激情| 狠狠久久五月精品中文字幕| 亚洲国产精品精华液网站| 亚洲小说欧美另类婷婷| 久久久久免费视频| 欧美国产在线电影| 亚洲视频日本| 久久久噜噜噜久久中文字幕色伊伊| 麻豆成人av| 性欧美1819性猛交| 久久久久久一区二区| 亚洲主播在线| 久久一综合视频| 99亚洲精品| 久久免费视频一区| 欧美午夜在线视频| 亚洲电影自拍| 午夜激情综合网| 亚洲国产精彩中文乱码av在线播放| 免费在线一区二区| 一区二区激情视频| 久久裸体艺术| 国产精品久在线观看| 91久久在线播放| 久久久久久久久一区二区| 亚洲人体1000| 蜜臀av国产精品久久久久| 国产精品美女久久久久aⅴ国产馆| 亚洲成色999久久网站| 欧美在线你懂的| 日韩视频在线观看| 女人色偷偷aa久久天堂| 狠狠88综合久久久久综合网| 午夜久久资源| 日韩亚洲精品视频| 欧美日韩成人综合在线一区二区| 伊人成人网在线看| 久久精品视频导航| 亚洲欧美日韩国产综合| 国产精品高清在线观看| 一区二区三区高清在线观看| 欧美高清在线观看| 媚黑女一区二区| 亚洲国产日韩在线| 欧美jizzhd精品欧美巨大免费| 欧美一区二区啪啪| 国产一区二区日韩精品欧美精品| 欧美亚洲视频在线观看| 亚洲男人的天堂在线aⅴ视频| 国产精品国产自产拍高清av王其| 亚洲一区中文字幕在线观看| 在线视频亚洲一区| 国产精品视频第一区| 午夜免费在线观看精品视频| 亚洲尤物在线| 国产一区二区三区黄| 久久久免费精品视频| 久久久久久香蕉网| 亚洲日本成人| 91久久午夜| 欧美三级韩国三级日本三斤| 亚洲一级二级| 午夜欧美不卡精品aaaaa| 国产欧美一区二区精品仙草咪| 香蕉久久精品日日躁夜夜躁| 午夜精品亚洲| 精品999网站| 亚洲高清一区二区三区| 欧美精品一区二区三| 久久久五月天| 欧美大片91| 亚洲一区二区免费| 先锋影音久久久| 在线看片第一页欧美| 亚洲欧洲一区二区三区久久| 国产精品狠色婷| 久久亚洲一区| 欧美精品一区二区三区视频| 羞羞漫画18久久大片| 久久综合九色欧美综合狠狠| 亚洲视频精选| 久久精品国产清自在天天线| 亚洲精品一区在线观看香蕉| 亚洲一区二区三区在线| 亚洲承认在线| 亚洲天堂av在线免费观看| 亚洲第一伊人| 亚洲一级一区| 最新国产乱人伦偷精品免费网站| 亚洲一二三区精品| 亚洲免费观看在线观看| 午夜亚洲性色视频| 99成人精品| 久久尤物视频| 欧美有码在线观看视频| 欧美精品在线免费播放| 久久久久国产精品一区二区| 欧美另类69精品久久久久9999| 欧美一区日本一区韩国一区| 欧美极品色图| 欧美a级大片| 国产一区二区三区在线播放免费观看| 亚洲高清av| 国户精品久久久久久久久久久不卡| 亚洲精品一区二区三区99| 一区二区三区在线视频观看| 夜夜嗨av色一区二区不卡| 亚洲国产成人精品久久| 亚洲欧美日韩系列| 中文精品视频| 欧美激情综合色| 久久一区中文字幕| 国产日产欧产精品推荐色| 中文在线不卡视频| 亚洲女人小视频在线观看| 欧美三级乱人伦电影| 亚洲剧情一区二区| 一道本一区二区| 欧美精品亚洲精品| 亚洲激情第一区| 亚洲清纯自拍| 欧美福利一区二区| 亚洲国产天堂久久综合网| 亚洲激情视频| 久久综合激情| 欧美成人一区二区三区在线观看 | 国产精品红桃| 亚洲视屏在线播放| 亚洲欧美视频在线观看视频| 国产精品对白刺激久久久| 一卡二卡3卡四卡高清精品视频| 日韩午夜激情av| 欧美午夜在线观看| 伊人久久婷婷| 久久综合电影一区| 亚洲第一网站| 亚洲精品色图| 欧美午夜不卡在线观看免费| 中日韩美女免费视频网址在线观看| 中文国产成人精品| 国产亚洲综合在线| 久久精品在线免费观看| 麻豆国产va免费精品高清在线| 伊人久久大香线蕉综合热线| 欧美国产精品久久| 亚洲视频www| 久久成人在线| 亚洲精品1区| 欧美日韩一区免费| 亚洲女同在线| 欧美成年人视频网站| 日韩亚洲精品电影| 欧美性猛交一区二区三区精品| 午夜亚洲精品| 亚洲激情国产| 久久精品水蜜桃av综合天堂| 亚洲国产精品免费| 国产精品国产a级| 久久久最新网址| 亚洲天堂成人在线观看| 久久在线免费| 亚洲欧美日本在线| 在线观看成人小视频| 欧美美女日韩| 欧美一区二区三区视频免费播放| 亚洲国产欧美国产综合一区| 欧美与欧洲交xxxx免费观看| 亚洲另类春色国产| 国产一区二区三区免费观看| 欧美另类变人与禽xxxxx| 久久国产主播精品| 亚洲一区二区动漫| 91久久精品国产91久久性色| 欧美一区网站| avtt综合网| 狠狠色香婷婷久久亚洲精品| 欧美三日本三级三级在线播放| 久久国产精品高清| 亚洲一区精品电影| 亚洲国产精品va在线看黑人动漫| 先锋亚洲精品| 亚洲调教视频在线观看| 亚洲精品视频在线看| 亚洲丁香婷深爱综合| 尹人成人综合网| 国产午夜精品一区二区三区视频 | 亚洲午夜精品久久久久久app|