Effective C++ 讀書筆記(一)

Effective C++ 讀書筆記(一)


版權聲明:本文為 cheng-zhi 原創文章,可以隨意轉載,但必須在明確位置注明出處!

資源管理 - 條款 16

  • 成對使用 new 和 delete 時要采取相同形式

錯誤的做法:

int *p;
delete []p;

std::string *stringArray = new std::string[100];
delete stringArray;

正確的做法:

int *p;
delete p;

std::string *stringArray = new std::string[100];
delete []stringArray;

原則:

  • 如果在 new 中使用了 [],必須在 delete 時加上 [],否則絕對不要加 [] 。
  • 當你的指針不是原始的簡單數據類型時,delete 時加上 [] 。

設計與聲明 - 條款 22

  • 將成員變量聲明為 private

錯誤的做法:

class Test {
public:
    int var;
};

正確的做法:

class Test {
private:
    int var;
};

優勢:

  • 將成員變量聲明為 private 可以讓客戶保證訪問該數據只能通過指定的接口,而 class 的作者則可以靈活的改變接口實現,但是不會影響用戶。

設計與聲明 - 條款 23

  • 寧以 non - member,non-friend 替換 member 函數

不好的做法:

class Test {
public:
    void clear_a();
    void clear_b();
    void clear_c();
public:
    /* member fun */
    void clear_all() 
    {
        clear_a();
        clear_b();
        clear_c();
    }
};

優秀的做法:

namespace TestSpace {
    class Test {
    public:
        void clear_a();
        void clear_b();
        void clear_c();
    };
    
    /* non-member,non-friend fun */
    void clear_all(Test& t)
    {
        t.clear_a();
        t.clear_b();
        t.clear_c();
    }
}

原則:
當你在一個 class 中定義的一個函數可以重新定義為 non-member,non-friend 函數時,請將它定義成 non-member,non-friend,因為這樣可以提高這個 class 的封裝程度,這雖然不符合面向對象的守則,但是這個一個例外,因為這種方法比使用原始的守則封裝度更好,你應該對你的代碼更好,不是嗎?

原文地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容