2017-12-12 14 views
-1

がここに私のテストコードです右辺値の割り当てに対応していません。 私は私のIDEで=演算子の実装を調べるためにナビゲーションを使用していますが、確かに処理されたのはコピージョブを実行しているoperator=(const vector<_Tp, _Alloc>& __x)です。のstd ::ベクトルは

ファイル全体を検索しましたが、operator=(vector<_Tp, _Alloc>&& __x)のような機能はありません。どのようにして、移動とrvalue featrueのメリットがありますか?

私のC++ヘッダーは/usr/include/c++/5で、確認したファイルはvector.tccです。

答えて

6

移動割り当てをサポートしていますが、あなたはそれを悪用しようとしています。あなたはconst参照によってbufferを受け入れます。移動割り当てにはソースを変更する必要があります。あなたのコンパイラはそれをあなたに伝えようとしています。

クイックフィックスは非const参照で受け入れることです。よりよい解決策は、すでに値の参照によってbufferを受け入れることです。そうすれば、呼び出し元は、ベクターの内容が盗まれたときに驚くことはありません。

さらに良い修正は値で受け入れることです。これにより、呼び出し元は、渡されたバッファの作成方法を完全に制御できます。そしてあなたの機能はもっと多くの場合に使えます。

+0

回答ありがとうございます、私は目的のためにこれをしました。しかし、 "no move assignment version"はどうですか?間違ったファイルを探していますか? – reavenisadesk

+0

@reavenisadesk - おそらく。コンパイラを指定したり、フラグを作成したりしていません。だから本当に言うことはありません。 – StoryTeller

関連する問題