补充:有的朋友对处理自赋值先调用基类赋值函数的情况提出了疑问。这里我给一个处理自赋值的例子,在出现自赋值的概率很低的时候,效率比主动判断高。
class Wilma { };
class Fred {
public:
Fred() : p_(new Wilma()) { }
Fred(const Fred& f) : p_(new Wilma(*f.p_)) { }
~Fred() { delete p_; }
Fred& operator= (const Fred& f)
{
Wilma* tmp = new Wilma(*f.p_); // 如果异常在此处被抛出也没有问题
delete p_;
p_ = tmp;
return *this;
}
private:
Wilma* p_;
};