條款1:盡量用const和inline而不用#define
注意情況:定義指針常量時,因為常量定義一般是放在頭文件中,除了指針所指的類型要定 義成const外,重要的是指針也經常要定義成const。
const char * const authorName = "Scott Meyers";
另外,定義某個類(class)的常量時,
為了保證常量最多只有一份拷貝,還要把它定義為靜態成員。
條款3:盡量用new和delete而不用malloc和free
malloc和free不知道構造函數和析構函數。在free數組時沒有調用析構函數的功能。
條款11: 為需要動態分配內存的類聲明一個拷貝構造函數和一個賦值操作符
看下面一個表示string對象的類:
// 一個很簡單的string類
class string {
public:
string(const char *value);
~string();
... // 沒有拷貝構造函數和operator=
private:
char *data;
};
如果這樣定義兩個對象:
string a("hello");
string b("world");
b = a;
這種情況下至少有兩個問題。第一,b曾指向的內存永遠不會被刪除,因而會永遠丟失。這是產生內存泄漏的典型例子。第二,現在a和b包含的指針指向同一個字符串,那么只要其中一個離開了它的生存空間,其析構函數就會刪除掉另一個指針還指向的那塊內存。