码迷,mamicode.com
首页 > 编程语言 > 详细

C++ Super-FAQ 『Assignment Operators』

时间:2016-03-01 12:35:17      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

  • 赋值操作符的关键在于自赋值机制的处理

重载赋值操作符时需要考虑自赋值问题,否则可能会导致严重错误。

Fred& operator= (const Fred& f)

{
      // Bad code: Doesn‘t handle self-assignment!
      delete p_;                // Line #1
      p_ = new Wilma(*f.p_);    // Line #2
      return *this;

}
该例子还有一个错误,若在new中抛出异常,则p_会变成野指针。
 
赋值操作代码的目的不是为了使自赋值更快。若当前代码能够正常处理自赋值(即使很慢),那就不要讲if语句添加至赋值操作符代码中。因为自赋值极少出现,也就无需使自赋值变得更有效率,增加不必要的if判断会使更多的赋值操作承担额外开销。这就是punishing the many to benefit the few.
 
 
  • 派生类的赋值操作符需要调用基类的赋值操作符吗?
若创建了自定义的赋值操作符,则需要显示调用基类的赋值操作符,因为编译器不会自动调用;
若未创建自定义赋值操作符,编译器则会自动调用基类的赋值操作符。

C++ Super-FAQ 『Assignment Operators』

标签:

原文地址:http://www.cnblogs.com/yanxingyoudao/p/5230357.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!