私は通常、コピースワップイディオムを使用して例外セーフなコピー代入演算子を作成しようとしていますが、ムーブ代入演算子を作成するときに例外を気にする必要があるかどうか疑問に思っていました。コピー代入演算子の例を次に示します。
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;
}
しかし、移動の割り当てはどうですか? つまり、この移動操作中にコードの別の場所で例外がスローされた場合、両方のオブジェクトの状態が失われますよね? そのため、最初にローカル コピーを作成してから、新しく作成したもの以外をすべて削除する必要がありCLArray
ます...
template <class T>
CLArray<T>&
CLArray<T>::operator=( CLArray<T>&& rhs )
{
size_ = rhs.size_;
data_ = std::move( rhs.data_ );
return *this;
}
data_
std::vector であることに注意してください。回答ありがとうございます。