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