C++ Super-FAQ 『Assignment Operators』
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Super-FAQ 『Assignment Operators』相关的知识,希望对你有一定的参考价值。
- 赋值操作符的关键在于自赋值机制的处理
重载赋值操作符时需要考虑自赋值问题,否则可能会导致严重错误。
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』的主要内容,如果未能解决你的问题,请参考以下文章
C++ Super-FAQ 『Operator Overloading』
C++ Super-FAQ 『Classes and Objects』
C++中关于继承中constructorcopy constructorcopy assignment的一些笔记
代写Assignment代写matlab Assignment代写python Assignment代写essay 代写Assignment代写Assignment