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 的封裝程度,這雖然不符合面向對象的守則,但是這個一個例外,因為這種方法比使用原始的守則封裝度更好,你應該對你的代碼更好,不是嗎?