Effective C 學習筆記 (13)

2021-06-09 06:57:54 字數 974 閱讀 4903

由於在寫**時很多時候需要用到資源,比如new乙個物件之類的,這樣一來資源的申請和釋放需要程式設計師自己完成,對**的邏輯需要謹慎設計,才能保證資源不會洩漏。

其實這類似的程式設計風格,在之前寫c的時候也有編碼規範來規定資源的釋放,比如do while的運用啊,goto exit0之類的方法,但是對於c++來說資源最好還是交給物件管理,這樣可以大幅度減少程式設計師對資源的管理。

c++庫提供了auto_ptr,boost庫提供了shared_ptr(後面被合入c++標準庫),這些智慧型指標都可以很好的管理資源。

下面看看auto_ptr的例子吧。

**很簡單,就上面幾行,為了看到auto_ptr到底如何管理資源的,我們還是繼續看彙編吧(很多時候需要認識真相我都會看看彙編o(∩_∩)o)。

在main函式退出後呼叫了auto_ptr的析構(因為該物件是棧變數),繼續看看auto_ptr的析構做了啥。

沒錯,delete了指向base的指標。這樣一來程式設計師就不用在關心物件的delete了。這其實就是effective c++上所講的兩個關鍵點:獲得資源後立刻放進管理物件、管理物件運用析構函式確保資源被釋放。

這裡所講的auto_ptr只是乙個很簡單的運用,其實auto_ptr只是乙個很弱的智慧型指標,相比起shared_ptr還缺少了引用計數,所以auto_ptr在拷貝的時候都遵循乙個原則「拷貝過後,被拷貝者被賦值為空」,所以在使用stl的容器模版時,是不能使用auto_ptr的。由於本機沒有安裝boost,所以暫時不能對shared_ptr做出分析。其實這些模版類都有對應的**,大家有興趣可以學習。

Effective C 學習筆記 (1)

本人學習c 不精,故重新學習,點滴記錄與大家分享,不足之處還望大牛多多指教 主要把c 分為四個部分吧 1 c 一種支援過程形式 函式形式程式設計的語言 2 object orientedc 物件導向形式的語言 3 templatec 泛型程式設計 模版元程式設計 4 stl 用stl代替了一類tem...

Effective C 學習筆記1

編譯器可以為暗自為class建立default建構函式,copy建構函式 copy assignment操作符以及析構函式 如果內含reference成員 const成員,那麼編譯器不會建立copy assignment操作符。另外,如果base classes 將copy asignment操作符...

Effective C 學習筆記

學習effective c 已經有相當長的一段時間了,今天抽出時間又堵了一遍第一部分 c語言 c 以c語言為基礎,幾乎支援所有的c語言成分,例如區塊 語句 預處理 內建資料型別 陣列 指標等,c語言的侷限是 沒有模板 沒有異常 沒有過載 物件導向的c 也就是加上了物件特性的c,類 封裝 繼承 多型 ...