真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

對(duì)象在使用之前的初始化-創(chuàng)新互聯(lián)

C++規(guī)定對(duì)象的初始化動(dòng)作發(fā)生在進(jìn)入構(gòu)造函數(shù)主體之前。(初始化列表比在構(gòu)造函數(shù)體內(nèi)初始化的效率高,以為在函數(shù)體內(nèi)初始化會(huì)調(diào)用默認(rèn)的構(gòu)造函數(shù))

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比泰安網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式泰安網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋泰安地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。

編譯單元是指產(chǎn)出單一目標(biāo)文件的那些源碼。

問(wèn)題:

  兩個(gè)源碼文件,每個(gè)文件中至少有一個(gè)non-local static對(duì)象(即該對(duì)象是全局的或者位于namespace作用域內(nèi),或在class內(nèi)或file的作用域內(nèi)被聲明為static)。如果某編譯單元內(nèi)的non-local static對(duì)象的初始化用動(dòng)作使用了另一個(gè)單元內(nèi)的某個(gè)non-local static對(duì)象,在這個(gè)時(shí)候由于c++對(duì)定義在不同的編譯單元內(nèi)的non-local static對(duì)象的初始化次序沒(méi)有明確的規(guī)定,所以用可能引發(fā)錯(cuò)誤。

例子:

你寫的程序(一個(gè)編譯單元):

class FileSystem
{
 public:
     …
     size-tnumDisk() const;
     …
};
Extern FileSystem tfs;//
準(zhǔn)備給別人用的對(duì)象

別人的程序(另一個(gè)編譯單元)

class Directory
{
  Directory(params)
{
   Size_tdisk=tfs.numDisks();   //使用第一個(gè)編譯單元的對(duì)象,假設(shè)在編譯這個(gè)文件之//前已經(jīng)編譯了上一個(gè)文件那么沒(méi)錯(cuò),如果相反呢?
}
};

解決辦法:

  將每個(gè)non-local static對(duì)象搬到自己專屬的函數(shù)內(nèi)(也就是在函數(shù)內(nèi)聲明為static)。這些函數(shù)返回一個(gè)引用指向它所含的對(duì)象。在調(diào)用的時(shí)候調(diào)用這些函數(shù)而不是直接調(diào)用對(duì)象。理由(c++保證,函數(shù)內(nèi)的local static對(duì)象會(huì)在該函數(shù)調(diào)用期間首次遇上該對(duì)象的定義式時(shí)被初始化)

程序修改之后:

class FileSystem
{
 public:
     …
     size-tnumDisk() const;
     …
};
FileSystem& tfs()
{  static FileSystem fs;
   returnfs;
}
 
 
Class Directory
{
  Directory(params)
{
       Size_tdisk=tfs().numDisks();   //調(diào)用函數(shù)tfs()
}
};
Directory& tempDir()
{
Static Directory td;
return td;
}

 任何一種non-conststatic對(duì)象不論他是local還是non-local,在多線程的環(huán)境下等待某事發(fā)生都會(huì)有麻煩,處理麻煩的做法是:在程序單線程啟動(dòng)的階段手工調(diào)用引用返回的函數(shù),這可以消除與初始化有關(guān)的競(jìng)速形式。

總結(jié):

  一、對(duì)內(nèi)置類型進(jìn)行手工初始化(c++不保證初始化他們)。

  二、構(gòu)造函數(shù)最好使用成員初始列,而不要在構(gòu)造函數(shù)內(nèi)使用賦值操作,初始列的次序應(yīng)該和class中的聲明次序相同。

  三、為免除跨編譯單元的初始化問(wèn)題,應(yīng)該用local static對(duì)象替換non-local static對(duì)象。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


網(wǎng)站欄目:對(duì)象在使用之前的初始化-創(chuàng)新互聯(lián)
當(dāng)前URL:http://weahome.cn/article/pisoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部