我通常(嘗試)使用複製交換語言編寫異常安全的複製賦值運算符,並且我想知道在編寫移動賦值運算符時是否應該關注異常。 這裏有一個副本assignement操作符的例子:異常安全移動運算符
template<class T>
CLArray<T>&
CLArray<T>::operator=(const CLArray& rhs)
{
CLArray tmp(rhs);
std::swap(size_, tmp.size_);
std::swap(data_, tmp.data_);
return *this;
}
但對於移動assignement?我的意思是,如果在移動操作過程中在代碼的其他地方拋出異常,我會失去兩個對象的狀態嗎?所以,我必須首先創建一個本地副本,然後刪除一切,但新創建的CLArray
...
template <class T>
CLArray<T>&
CLArray<T>::operator=(CLArray<T>&& rhs)
{
size_ = rhs.size_;
data_ = std::move(rhs.data_);
return *this;
}
請注意,data_
是一個std ::向量,並感謝您的答案!
感謝您的回答,我完全明白爲什麼創建一個副本將愚蠢的移動assignement。 – Athanase