EffectiveC 學習筆記 條款7

2021-08-02 18:22:10 字數 963 閱讀 3268

條款7 為多型基類宣告virtual析構函式

例如設計乙個記錄時間的基類

class timekeeper

classs atomicclock : public timekeeper;//原子鐘

classs waterclock: public timekeeper;//水鐘

classs wristwatch: public timekeeper;//腕表

我們可以使用工廠返回乙個計時物件,

timekeeper* gettimekeeper();

...delete ptk;

另外條款13說過:依賴客戶執行的delete動作,基本上表帶有某種錯誤傾向。(智慧型指標之後再說)

於是我們delete的只是atomicclock 中timekeeper的部分,為了避免這樣,我們需要在timekeeper中的析構函式宣告為virtual

但是不想作為bass class的類,最好不用讓其析構函式宣告為virtual。

例如表示乙個二維點:

class point

{public:

point(int xcoord, int ycoord);

~point();

private:

int x,y;

假如int占用32bits,point物件可以放入乙個64-bit的快取器,可以傳給例如c語言編寫的函式中。

但是point析構函式是乙個virtual時,他將會有乙個vptr,用來決定執行期哪乙個virtual函式被呼叫,32-bit計算機體系中將占用到96bits!或者64bit計算機可能占用到128bits!這樣物件大小就增大了50%-100%。

只有當class中至少含有乙個virtual函式,才為他宣告virtual析構函式

Effective C 學習筆記

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

Effective C 學習筆記

1 c 是乙個複合式的語言 c 中不同部分有著不同的語言特性,例如 1.1 在c中傳遞形參時,按照值傳遞比按照指標傳遞效率更高 1.2 在物件導向程式中,物件要按照const引用而不是按照值傳遞 1.3 在stl程式設計中採取按照值傳遞方式 所以說c 中沒有統一的準則,要按照不同的特性採取不同的使用...

effective c 學習筆記

如果不考慮應用程式的使用場合,僅僅考慮語言的靈活性,我贊成作者的想法。但是不同的應用它會有不同的效能要求,所以語言的選擇,應該是用 最適合 條款去選擇。使用巨集定義常量,若定義在標頭檔案中,則所有包含標頭檔案的都可以使用。巨集定義,在預處理的時候進行替換。巨集定義一些簡單的函式,可以減少呼叫開銷,但...