C++編程規範之32:弄清楚要編寫的是哪種類
摘要:
了解自我:有很多種不同的類。弄清楚要編寫的是哪一種。
不同種類的類適用於不同用途,因此遵循著不同的規則。值類模仿的是內置類型。一個值類應該:
1.有一個公用析構函數、複製構造函數和帶有值語義的賦值。
2.沒有虛擬函數(包括析構函數)。
3.是用作具體類,而不是基類。
4.總是在棧中實例化,或者作為另一個類直接包含的成員實例化。
基類是類層次結構的構成要素。一個基類應該:
1.有一個公用而且虛擬,或者保護而且非虛擬的析構函數,和一個非公用複製構造函數和複製操作符。
2.通過虛擬函數建立接口。
3.總是動態地在堆中實例化為具體派生類對象,並通過一個智能指針來使用。
不嚴格地來說,traits類是攜帶有關類型信息的模版。一個traits類應該:
1.隻包含typedef和靜態函數,沒有可修改的狀態或者虛擬函數。
2.通常不獨立實例化,隻作為基類或者成員。
異常類提供了不尋常的值與引用語義的混合:它們通過值拋出,但應該通過引用捕獲。一個異常類應該:
1.有一個公用析構函數和不會失敗的構造函數。
2.有虛擬函數,經常實現克隆和訪問。
3.從std::exception虛擬派生更好。
最後更新:2017-04-03 12:53:56