关闭

Effective C++回顾(10)

1551人阅读 评论(0) 收藏 举报

条款14:总是让base class拥有virtual destructor

 

我看过很多的面试试卷,基本上都会出跟这个条款相关类型的题目,由于这个条款涉及到设计一个类的基本知识问题。同时更多的时候,我们也要注意到类的大小和效率问题,因为在没有涉及到继承问题的情况下,增加一个virtual destructor会增加类的开销。

 

条款15:令operator=传回“*thisreference

 

理解这个条款对于设计一个优秀的类非常重要,因为对于程序语言来讲,能够采用自然的数学表达方式非常重要。同时我们在重载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检查一下,它会告诉你很多信息的。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:270472次
    • 积分:3816
    • 等级:
    • 排名:第8374名
    • 原创:92篇
    • 转载:5篇
    • 译文:24篇
    • 评论:61条
    文章分类