effective c++裏的 ,處理operator =的自我賦值
class Widget{
void swap(Widget& rhs);//交換rhs和*this的數據
Widget& operator =(const Widget& rhs)
{
Widget temp(rhs);
swap(temp);
return *this;
}
}
我不明白的是:
1. 這裏所謂的copy and swap,應該是防止拷貝的過程中出現異常,所以先往temp對象上拷貝,如果異常,則*this不改變。接下來我覺得只需要把temp對象全部複製到*this就可以了,爲什麼要swap,將*this的拷貝給temp?
2. 如果要構造臨時對象,那麼拷貝構造函數也就需要類似的考慮,防止new之類的操作產生異常。感覺又繞回來了,如果拷貝構造能解決,那麼operator =也用類似方法解決不久好了?
swap只是爲了把temp的內容拿給this吧,至於this的交給temp以後反正temp馬上就析構了,剛好處理掉... ...
假設 (*this).b 指向數組A1,temp.b指向A2,swap以後
(*this).b 指向A2,temp.b指向A1。
我是這個意思,A1和A2本身不交換。當然如果你有需要,也可以實現深層次的swap。
我這裏的swap只是個僞代碼,具體怎麼swap還要看你的需求,std::swap貌似如果不能調用要交換的對象的swap成員函數,就會做個淺拷貝... ...