Effective C++回顾(10)

条款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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值