非常簡單的問題。爲什麼超負荷運營商=使例外安全
class Bitmap {...};
class Widget {
...
private:
Bitmap* pb;
};
當重載拷貝賦值時,書(Effective C++)說:下面的代碼是異常安全的。
Widget& Widget::operator=(const Widget& rhs) {
if (rhs == *this) return;
Bitmap* pOrig = pb; //?? why remember the pb can do exception safety?
pb = new Bitmap(*rhs.pb);
delete pOrig;
return *this;
}
書稱:即使通過新的位圖(* rhs.pb)遇到了例外,上面的代碼可以做到異常安全,鉛可以保持相同的,而不是指向NULL,但怎麼樣,爲什麼呢?有人可以幫助我嗎?謝謝!
這是書的確切文字?這聽起來不像是可以通過編輯完成的那種文本。如果可能,請引用*確切的文字*。 –
什麼樣的*異常安全*?強大?基本? NoExcept? –
我懷疑這本書說'&rhs == this',而不是'rhs == * this'。 – molbdnilo