一、具体注意事项
(1)如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete。
(2)new和delete必须相互兼容。new对应于delete,new[]对应于delete[]。
(3)如果有多个构造函数,则必须以相同的方式使用new,要么都带中括号,要么都不带。因为只有一个析构函数,所有的构造函数都必须与它兼容。然而,可以在一个析构函数中使用new初始化指针,而在另一个构造函数中将指针初始化为空(0或C++11中的nullptr),这是因为delete可以用于空指针(无论是带中括号还是不带中括号的new)。
注: NULL、0、nullptr,原先,空指针可以使用0或NULL来表示(在很多头文件中,NULL是一个被定义为0的符号常量)。C程序员通常使用NULL而不是0,以指出这是个指针,就像使用’\0’而不是0来表示空字符,以指出这是一个字符一样。然而C++传统上更喜欢使用0,而不是等价的NULL。但C++11提供了关键字nullptr,这是个更好的选择。
(4)应定义一个复制构造函数,通过深度复制将一个对象初始化为另一个对象。
(5)应当定义一个赋值运算符,通过深度复制将一个对象复制给另一个对象。