為複製建構子和賦值運算子建立通用函數
複製建構子和賦值運算子重載通常共用相似的程式碼,僅在共用相似的程式碼以下方面有所不同他們的返回類型。我們可以透過建立一個兩者都可以使用的通用函數來簡化這個過程嗎?
選項1:從複製建構子明確呼叫Operator=
MyClass(const MyClass& other) { operator=(other); }
通常不鼓勵這種方法因為它引入了舊狀態管理和自我分配的問題。此外,它預設初始化所有成員,即使它們是從其他物件分配的。
選項2:實作運算子=使用複製建構子和交換
首選解決方案涉及使用複製建構子和交換方法實作operator=:
MyClass& operator=(const MyClass& other) { MyClass tmp(other); swap(tmp); return *this; }
或甚至:
MyClass& operator=(MyClass other) { swap(other); return *this; }
交換函數交換內部資料的所有權,而無需清理現有狀態或分配新資源。這種方法是自分配安全和強異常安全的,前提是交換操作是無拋出的。
注意事項:
確保 swap 方法執行 true swap,而不是預設的 std::swap,它依賴複製建構子本身。對原始類型和指標類型使用成員交換來保證無拋出行為。
以上是通用函式可以簡化複製建構函式和賦值運算子重載嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!