条款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包含的指针指向同一个字符串,那么只要其中一个离开了它的生存空间,其析构函数就会删除掉另一个指针还指向的那块内存。