自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

進(jìn)行C++標(biāo)準(zhǔn)模板庫管理

開發(fā) 后端
C++標(biāo)準(zhǔn)模板庫已經(jīng)有了一個(gè)模板類,叫做auto_ptr,其作用就是提供這種封裝,但是Smart Pointer模板類,它十分堅(jiān)固,甚至無法實(shí)現(xiàn)。

C++標(biāo)準(zhǔn)模板庫是由Alexander Stepanov、Meng Lee和David R Musser在惠普實(shí)驗(yàn)室工作時(shí)所開發(fā)出來的,C++標(biāo)準(zhǔn)模板庫在C++中的應(yīng)用十分廣泛,這項(xiàng)技術(shù)在引進(jìn)C++之前已經(jīng)使用很久了。

我們會(huì)假設(shè)一個(gè)失敗的資源分配會(huì)導(dǎo)致一個(gè)異常--事實(shí)上,這會(huì)經(jīng)常的發(fā)生。所以如果你想試圖用一個(gè)石頭打兩只鳥的話,或者在一個(gè)構(gòu)造函數(shù)中申請(qǐng)兩種形式的資源,你可能就會(huì)陷入麻煩。

只要想想在一種資源分配成功但另一種失敗拋出異常時(shí)會(huì)發(fā)生什么。因?yàn)闃?gòu)造函數(shù)還沒有全部完成,析構(gòu)函數(shù)不可能被調(diào)用,第一種資源就會(huì)發(fā)生泄露。這種情況可以非常簡單的避免。無論何時(shí)你有一個(gè)需要兩種以上資源的類時(shí),寫兩個(gè)笑的封裝器將它們嵌入你的類中。每一個(gè)嵌入的構(gòu)造都可以保證刪除,即使包裝類沒有構(gòu)造完成。

我們至今還沒有討論最常見類型的資源--用操作符new分配,此后用指針訪問的一個(gè)對(duì)象。我們需要為每個(gè)對(duì)象分別定義一個(gè)封裝類嗎?(事實(shí)上,C++標(biāo)準(zhǔn)模板庫已經(jīng)有了一個(gè)模板類,叫做auto_ptr,其作用就是提供這種封裝。我們一會(huì)兒在回到auto_ptr。)讓我們從一個(gè)極其簡單、呆板但安全的東西開始??聪旅娴腟mart Pointer模板類,它十分堅(jiān)固,甚至無法實(shí)現(xiàn)。

  1. class Lock  
  2.   {  
  3.   public:  
  4.   Lock (CritSect& critSect)  
  5.   : _critSect (critSect)  
  6.   {  
  7.   _critSect.Acquire ();  
  8.   }  
  9.   ~Lock ()  
  10.   {  
  11.   _critSect.Release ();  
  12.   }  
  13.   private  
  14.   CritSect & _critSect;  
  15.   };  
  16.   鎖一般的用法如下:  
  17.   void Shared::Act () throw (char *)  
  18.   {  
  19.   Lock lock (_critSect);  
  20.   // perform action -- may throw  
  21.   // automatic destructor of lock  
  22.   } 

為什么要把SPtr的構(gòu)造函數(shù)設(shè)計(jì)為protected呢?如果我需要遵守第一條規(guī)則,那么我就必須這樣做。資源--在這里是class T的一個(gè)對(duì)象--必須在封裝器的構(gòu)造函數(shù)中分配。但是我不能只簡單的調(diào)用new T,因?yàn)槲也恢繲的構(gòu)造函數(shù)的參數(shù)。

因?yàn)?,在原則上,每一個(gè)T都有一個(gè)不同的構(gòu)造函數(shù);我需要為他定義個(gè)另外一個(gè)封裝器。C++標(biāo)準(zhǔn)模板庫的用處會(huì)很大,為每一個(gè)新的類,我可以通過繼承SPtr定義一個(gè)新的封裝器,并且提供一個(gè)特定的構(gòu)造函數(shù)。

同樣的,你也可以再你的代碼中用加強(qiáng)Release的可靠性。相應(yīng)的Pop方法要做些什么呢?他應(yīng)該釋放了資源并祈禱調(diào)用它的是一個(gè)負(fù)責(zé)的人而且立即作一個(gè)資源傳遞它到一個(gè)Smart Pointer?這聽起來并不好。

資源管理在內(nèi)容索引(Windows NT Server上的一部分,現(xiàn)在是Windows 2000)上工作,并且,我對(duì)這十分滿意。然后我開始想……這一方法是在這樣一個(gè)完整的系統(tǒng)中形成的,如果可以把它內(nèi)建入語言的本身豈不是一件非常好?我提出了強(qiáng)指針(Strong Pointer)和弱指針(Weak Pointer)。

一個(gè)Strong Pointer會(huì)在許多地方和我們這個(gè)SPtr相似--它在超出它的作用域后會(huì)清除他所指向的對(duì)象。資源傳遞會(huì)以強(qiáng)指針賦值的形式進(jìn)行。也可以有Weak Pointer存在,它們用來訪問對(duì)象而不需要所有對(duì)象--比如可賦值的引用。

任何C++標(biāo)準(zhǔn)模板庫都必須聲明為Strong或者Weak,并且語言應(yīng)該來關(guān)注類型轉(zhuǎn)換的規(guī)定。例如,你不可以將Weak Pointer傳遞到一個(gè)需要Strong Pointer的地方,但是相反卻可以。Push方法可以接受一個(gè)Strong Pointer并且將它轉(zhuǎn)移到Stack中的Strong Pointer的序列中。Pop方法將會(huì)返回一個(gè)Strong Pointer。把Strong Pointer的引入語言將會(huì)使垃圾回收成為歷史。

【編輯推薦】

  1. C與C++中標(biāo)準(zhǔn)輸入實(shí)現(xiàn)方式上的一點(diǎn)區(qū)別
  2. C++編譯器如何對(duì)Const常量進(jìn)行分配存儲(chǔ)空間
  3. C++類庫設(shè)計(jì)的基本構(gòu)思與方法
  4. 玩轉(zhuǎn)C++語言的幾種方法
  5. 如何更好的進(jìn)行C++代碼編制
責(zé)任編輯:chenqingxiang 來源: CSDN
相關(guān)推薦

2022-09-22 10:22:36

C++編程語言代碼

2010-01-13 10:09:24

C++標(biāo)準(zhǔn)庫

2010-01-14 15:46:27

C++標(biāo)準(zhǔn)庫

2024-01-24 11:44:44

C++智能指針開發(fā)

2010-01-14 09:55:30

C++標(biāo)準(zhǔn)庫

2019-09-18 09:05:26

微軟開源Windows

2010-02-03 16:04:34

C++標(biāo)準(zhǔn)類庫

2010-01-14 09:43:26

C++標(biāo)準(zhǔn)程序庫

2010-01-19 09:39:43

C++標(biāo)準(zhǔn)程序庫

2010-01-19 09:39:43

C++標(biāo)準(zhǔn)程序庫

2010-01-22 13:31:58

C++標(biāo)準(zhǔn)庫

2010-01-19 18:04:02

C++標(biāo)準(zhǔn)程序庫

2010-01-15 14:59:54

C++標(biāo)準(zhǔn)程序庫

2023-12-18 11:15:03

2023-12-13 10:51:49

C++函數(shù)模板編程

2010-01-28 10:33:10

C++開發(fā)程序

2020-09-20 21:07:26

GitHub代碼 C++

2010-01-20 14:35:55

C++調(diào)用

2010-02-05 09:23:38

C++連接SQL數(shù)據(jù)庫

2010-01-19 14:39:22

C++ Builder
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)