copy and swap

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成員函數,就會做個淺拷貝... ...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章