1. 程式人生 > >C++ 賦值運算子函式

C++ 賦值運算子函式

型別中的賦值運算子函式的設計需要考慮以下幾點:

  1. 把返回值的型別宣告為該型別的引用,並在函式結束前返回例項自身的引用(保證連續賦值)。
  2. 把傳入的引數的型別宣告為常量引用(避免呼叫拷貝建構函式)。在拷貝賦值運算子函式中,如果不改變引數的狀態,則設定 const 關鍵字。
  3. 釋放自身已有的動態分配的記憶體(防止記憶體洩露)。
  4. 如果傳入引數和當前例項 *this 是同一個例項,則不進行賦值,直接返回。
  5. 保證異常安全性。動態記憶體分配可能會產生異常。
class MyClass {
public:

};

MyClass& MyClass::operator=(const MyClass& arg) { //拷貝賦值運算子函式
if (this == &arg) return *this; MyClass tmp(*this); // TODO // 將arg中的資料拷貝到this中 // 如果發生異常,將由tmp儲存的的資料移動回this的記憶體空間中 return *this; } // 離開tmp的作用域,解構函式被自動呼叫 MyClass& MyClass::operator=(MyClass&& arg) { //移動賦值運算子函式 if (this == &arg) return *this; // 將arg中的資料移動到this的記憶體空間中
// 保證arg使用安全,如指標設定為nullptr return *this; }