概述:複製並交換(Copy-and-Swap)是C++程式設計中的慣用法,用於實現賦值運算子和確保異常安全的複製建構函式。其核心思想是透過複製建構函式建立臨時副本,再透過交換確保操作的異常安全性。這種方法在C++11之前和之後都適用,但在C++11中,移動語義和右值引用的引入使得實現可以更加高效。
複製並交換(Copy-and-Swap)是一種C++程式設計中的慣用法,通常用於實現賦值運算子和確保異常安全的複製建構函式。它的基本思想是使用複製建構函式建立臨時副本,然後透過交換臨時副本和當前物件的內容來確保異常安全。
#include <iostream>
#include <algorithm> // For std::swap
class MyClass {
public:
// 建構函式和其他成員函式的實現...
// 複製建構函式
MyClass(const MyClass& other) : data(new int(*other.data)) {}
// 複製並交換
friend void swap(MyClass& first, MyClass& second) noexcept {
using std::swap;
swap(first.data, second.data);
}
// 賦值運算子
MyClass& operator=(MyClass other) {
swap(*this, other); // 利用複製建構函式建立臨時副本
return *this;
}
// 解構函式
~MyClass() {
delete data;
}
private:
int* data;
};
int main() {
MyClass obj1;
MyClass obj2 = obj1; // 呼叫複製建構函式
MyClass obj3;
obj3 = obj1; // 呼叫賦值運算子
return 0;
}
在這個例子中,swap函式實現了交換兩個物件的資料成員,而賦值運算子則利用複製建構函式建立了傳入物件的臨時副本,再透過交換確保了異常安全性。這種做法在C++11之前和之後基本一致,但在C++11引入了移動語義和右值引用,可以進一步最佳化實現。