成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

進行C++標準模板庫管理

開發 后端
C++標準模板庫已經有了一個模板類,叫做auto_ptr,其作用就是提供這種封裝,但是Smart Pointer模板類,它十分堅固,甚至無法實現。

C++標準模板庫是由Alexander Stepanov、Meng Lee和David R Musser在惠普實驗室工作時所開發出來的,C++標準模板庫在C++中的應用十分廣泛,這項技術在引進C++之前已經使用很久了。

我們會假設一個失敗的資源分配會導致一個異常--事實上,這會經常的發生。所以如果你想試圖用一個石頭打兩只鳥的話,或者在一個構造函數中申請兩種形式的資源,你可能就會陷入麻煩。

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

我們至今還沒有討論最常見類型的資源--用操作符new分配,此后用指針訪問的一個對象。我們需要為每個對象分別定義一個封裝類嗎?(事實上,C++標準模板庫已經有了一個模板類,叫做auto_ptr,其作用就是提供這種封裝。我們一會兒在回到auto_ptr。)讓我們從一個極其簡單、呆板但安全的東西開始。看下面的Smart Pointer模板類,它十分堅固,甚至無法實現。

  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的構造函數設計為protected呢?如果我需要遵守第一條規則,那么我就必須這樣做。資源--在這里是class T的一個對象--必須在封裝器的構造函數中分配。但是我不能只簡單的調用new T,因為我不知道T的構造函數的參數。

因為,在原則上,每一個T都有一個不同的構造函數;我需要為他定義個另外一個封裝器。C++標準模板庫的用處會很大,為每一個新的類,我可以通過繼承SPtr定義一個新的封裝器,并且提供一個特定的構造函數。

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

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

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

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

【編輯推薦】

  1. C與C++中標準輸入實現方式上的一點區別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設計的基本構思與方法
  4. 玩轉C++語言的幾種方法
  5. 如何更好的進行C++代碼編制
責任編輯:chenqingxiang 來源: CSDN
相關推薦

2022-09-22 10:22:36

C++編程語言代碼

2010-01-13 10:09:24

C++標準庫

2010-01-14 15:46:27

C++標準庫

2024-01-24 11:44:44

C++智能指針開發

2010-01-14 09:43:26

C++標準程序庫

2010-01-19 09:39:43

C++標準程序庫

2010-02-03 16:04:34

C++標準類庫

2010-01-19 09:39:43

C++標準程序庫

2010-01-14 09:55:30

C++標準庫

2019-09-18 09:05:26

微軟開源Windows

2010-01-15 14:59:54

C++標準程序庫

2010-01-19 18:04:02

C++標準程序庫

2010-01-22 13:31:58

C++標準庫

2023-12-18 11:15:03

2010-01-28 10:33:10

C++開發程序

2010-01-20 14:35:55

C++調用

2020-09-20 21:07:26

GitHub代碼 C++

2023-12-13 10:51:49

C++函數模板編程

2010-02-05 09:23:38

C++連接SQL數據庫

2010-01-19 14:39:22

C++ Builder
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩av在线不卡 | 日韩成人专区 | 欧美成人一级 | 国产一区视频在线 | 国产毛片毛片 | 中文字幕亚洲一区二区三区 | 久久精品青青大伊人av | 免费午夜视频 | 免费一级欧美在线观看视频 | www.久久影视| 国产福利视频网站 | 男女羞羞视频大全 | 国产999精品久久久 日本视频一区二区三区 | 欧美亚洲国产一区二区三区 | 免费黄色片在线观看 | 欧美性视频在线播放 | 91成人在线视频 | 91国在线视频 | 国产精品精品视频一区二区三区 | 五月激情六月婷婷 | 欧美综合一区二区 | 国产三区视频在线观看 | 色吧色综合 | 欧美日韩大片 | 欧美精品网站 | 日韩成人专区 | 久久精品一区二区三区四区 | 一本一道久久a久久精品综合蜜臀 | 欧美久久一区 | 日韩av一区二区在线观看 | 成人在线中文字幕 | 久久久久一区二区三区 | 日本成人免费网站 | 免费一区二区三区 | 免费黄色特级片 | 国产中文字幕在线 | 久久精品视频网站 | 毛片免费观看视频 | 中文字幕成人免费视频 | 久久综合久久综合久久 | 欧美精品乱码久久久久久按摩 |