C++ 改善程序與設計的做法

條款6

編譯器會爲類自動創建default構造函數、copy構造函數、copy assignment操作符。若不想要這些功能,以免被其他類調用,可以將相應的類函數聲明爲private並不予實現。也可以單獨做一個Uncopyable類,此類設置某些函數爲private類型,作爲基類使用。 

條款7

帶多態性質的基類應該聲明一個虛析構函數。如果一個類帶有任何虛函數,它就應該擁有一個虛析構函數。

類的設計目的如果不是爲了作爲具有多臺性質的基類,那麼這個類最好不要聲明虛析構函數,否則會帶來不必要的開銷。

條款8

析構函數絕對不要拋出異常,如果一個被析構函數調用的函數可能拋出異常,析構函數應該捕獲任何異常,然後吞下他們或結束程序。

如果客戶需要對某個操作函數運行期間跑車的異常做出反應,那麼累應該提供一個在析構函數之外的函數執行該操作。

條款9

在構造函數和析構函數期間不要調用virtual函數,因爲這類迪歐用從不下降至派類。

條款10

爲了賦值的傳遞性存在,令operator =返回一個指向自身的指針即*this。

條款11

爲了避免自我賦值出現異常,可以採用兩種方法。一:證同測試,如果等號左右相同就不執行賦值。二:copy and swap,即做一個副本然後用swap做交換。

條款12

coping函數應該確保賦值對象內的所有成員變量和所有base class的成分。因此,在字定義的cipying 函數中不僅要賦值自身的成員,還要主動調用父類的copying函數。

條款13

爲了方式資源泄露,請使用RAII對象,他們在構造函數中獲得資源並在析構函數中釋放資源。

兩個被常用的RAII類分別是tr1::shared_ptr和auto_ptr。請注意兩者的區別。後者不允許有兩個對象擁有統一資源。

注:

tr1::shared_ptr採用“引用計數智能指針”-RCSP(Reference-counting Smart Pointer)

RAII(Resource Acquisition Is Initialization)即,“資源取得時機便是初始化時機”。

在動態分配而得到的Array上使用auto_ptr或tr1::shared_ptr是不行的,因爲兩者在其析構函數內做的事delete而不是delete[]動作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章