您的位置:首页 > 编程语言 > C语言/C++

C++ Super-FAQ 『Assignment Operators』

2016-03-01 11:36 260 查看
赋值操作符的关键在于自赋值机制的处理

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

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.

派生类的赋值操作符需要调用基类的赋值操作符吗?

若创建了自定义的赋值操作符,则需要显示调用基类的赋值操作符,因为编译器不会自动调用;
若未创建自定义赋值操作符,编译器则会自动调用基类的赋值操作符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: