原创 讀書筆記《Effective c++》 條款16 成對使用new和delete時要採用相同形式

這個沒什麼好說的了,如果你在new表達式中使用[],必須在相應的delete表達式中也使用[]。如果你在new表達式中不使用[],一定不要在相應的delete表達式中使用[]。 因爲數組的內存佈局和普通對象的內存佈局不同,混用是UB,

原创 讀書筆記《Effective c++》 條款10 令operator= 返回一個reference to *this

這個主要的點是,賦值可以寫成連鎖形式: int x, y, z; x = y = z =15; class Widget { public: Widget& operator+=(const Widget& rhs) { //.

原创 讀書筆記《Effective c++》 條款07 爲多態基類聲明virtual析構函數

這個其實不用多說,用過OO類的語言應該都要這樣。 這麼看來簡單的對象和delphi的對象結構差不多。 書中說c++不支持final,在c++11中已經支持了,所以如果不希望類被繼承,可以加上final c++的final有兩個用途:

原创 讀書筆記《Effective c++》 條款19 設計class猶如設計type

a.新type的對象應該如何被創建和銷燬。new,new[],delete,delete[] b.對象的初始化和對象的賦值該有什麼樣的差別? c.新type的對象如果被passed by value,意味着什麼?copy構造函數用來

原创 讀書筆記《Effective c++》 條款14 在資源管理類中小心copying行爲

當持有資源的類進行copying動作的時候要注意,指向資源的指針(假定是指針)也被複制了,也就是指向資源的指針數量又1個變爲2個,那麼資源什麼時候釋放就是個必須關心的問題了。 還好shared_ptr可以解決這個問題,將指向資源的指針

原创 讀書筆記《Effective c++》 條款11 在operator= 中處理“自我賦值”

例如:*px = *py 而px和py指向同一個對象,就出現了自我賦值 class Bitmap{}; class Widget { //... private: Bitmap* pb; }; //下面是operator=的實現代

原创 讀書筆記《Effective c++》 條款12 複製對象時勿忘其每一個成分

名詞:   copying函數 = 拷貝構造函數 + 賦值操作符 重點是:當你自己要編寫一個copying函數時,請確保:   a.複製所有local成員變量   b.調用所有base class內的適當的copying函數。(拷貝構

原创 讀書筆記《Effective c++》 條款05 瞭解c++默默編寫並調用哪些函數

編譯器會案子爲class創建default構造函數、copy構造函數、copy assignment操作符,以及析構函數。 但是,如果此類的成員類型會導致編譯器比較難以理解生成構造函數的樣子的時候,編譯器會拒絕爲其生成默認的成員函數。