前にC++ 11には、常にいつものように、const参照によって渡す必要が代入演算子をコピーする場合があった。代入演算子をconst参照または値で渡す必要がありますか?
template <typename T>
ArrayStack<T>& operator= (const ArrayStack& other);
しかし、移動代入演算子やコンストラクタの導入と、それは思わその代わりにコピー代入の代わりに値渡しを使用することを提唱している人もいます。移動代入演算子も追加する必要があります
template <typename T>
ArrayStack<T>& operator= (ArrayStack other);
ArrayStack<T>& operator= (ArrayStack&& other);
上記2オペレータの実装は次のようになります。
template <typename T>
ArrayStack<T>& ArrayStack<T>::operator =(ArrayStack other)
{
ArrayStack tmp(other);
swap(*this, tmp);
return *this;
}
template <typename T>
ArrayStack<T>& ArrayStack<T>::operator =(ArrayStack&& other)
{
swap(*this, other);
return *this;
}
が、Cのためのコピー代入演算子を作成するときに値渡しを使用することをお勧めします++ 11以降?どのような状況で私はそうするべきですか? C++ 11に
'operator =(ArrayStack)'はコピー 'tmp'を作成する理由がありません。 – aschepler
http://www.slideshare.net/ripplelabs/howard-hinnant-accu2014 slides 43-53 –
値渡しのバージョンでは、通常、コピーアンドスワップによって移動およびコピーの割り当てを行うことができます。 –