条款14:总是让base class拥有virtual destructor
我看过很多的面试试卷,基本上都会出跟这个条款相关类型的题目,由于这个条款涉及到设计一个类的基本知识问题。同时更多的时候,我们也要注意到类的大小和效率问题,因为在没有涉及到继承问题的情况下,增加一个virtual destructor会增加类的开销。
条款15:令operator=传回“*this的reference”
理解这个条款对于设计一个优秀的类非常重要,因为对于程序语言来讲,能够采用自然的数学表达方式非常重要。同时我们在重载operator=操作符的时候,也要注意到一个效率问题,看下面这个例子:
class CMyString
{
public:
…..
CMyString &operator=(const CMyString &other);
};
CMyString temp = “test string”;
如果在我们的代码中只针对const CMyString重载了=操作符,所以对于编译器来讲,在编译过程中会生成下面的代码:
const CMyString tempstring(“test string”);
CMyString temp = tempstring;
这就有一个效率问题了,如果我们考虑到这个问题,那么我们在重载=操作符的时候,对const char *也进行重载:
CMyString &operator=(const char *pOtherString);
这样我们程序的效率就大大提高了。
条款16:在operator=中为所有的data members设定内容
条款17:在operator=中检查是否“自己赋值给自己”
没话好说的,是一定要遵守的。
看似简单的一个 operator= 操作事实上包含了这么的内容,很多也可以说是一些陷井,如果你没有注意和理解它,那么你在书写程序的时候就会犯错。如果对自己写的类不放心,用 C++ Test 检查一下,它会告诉你很多信息的。