1. operator= 返回一個reference to *this, 即重載賦值運算符時要返回*this對象的引用
2. 在operator =中處理“自我賦值”, 即重載賦值運算符時要儘量考慮當傳遞的參數是自身對象時的情況, eg:
if(this = &meb)
return *this
3. swap操作
(1) 容器類的swap函數: vector.swap(meb)
不會刪除原始數據也不會申請新的空間, 且迭代器也不會失效(我的理解是隻是交換讀取數據的指針位置),所以速度會很快(2) 泛型算法的swap函數: std:swap(meb1,meb2)
例:String& operator=(String rhs) // yes, pass-by-value
{
swap(rhs);
return *this;
}
void swap(String& rhs)
{
std::swap(data_, rhs.data_);
}
(a) String &, 返回*this對象的引用(b) String rhs, 使用值傳遞而不使用引用的方式傳遞參數的是由於之後會使用swap函數, 那麼this->data_會竊取rhs.data_的資源,反之rhs.data_也是, 但由於this->data_並沒有申請空間, 所以此時rhs.data_指向了空, 破壞了傳進來的數據. 而使用值傳遞方式, 會創建一個臨時對象, 而this->data_是竊取的臨時對象的資源, 而臨時對象本來重載函數調用之後就會回收,所以也沒有其他影響.
(3) 如果rhs是this對象本身,也不要緊, 因爲傳進來跟不是this對象, 而是拷貝this對象的臨時對象.
Reference
[1] 《Effective C++》學習筆記條款10 令operator= 返回一個reference to *this[2] C++面試中string類的一種正確寫法