問題タブ [move-constructor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1522 参照

c++ - コンストラクターの署名を移動する

この参照からconst、移動コンストラクターとして右辺値を許可します

可動オブジェクトはどのようにできますconstか? これが技術的に許可されていたとしても、そのような宣言が役立つ場合はありますか?

0 投票する
2 に答える
621 参照

c++ - std :: vector :: push_backには前提条件がありますか?

Andrzejのmoveコンストラクターの記事へのコメントで、moved fromオブジェクトは、前提条件を持たない任意のメンバー関数を呼び出すことができると投稿しました。ベクトルが空でないという前提条件があるためstd::vector::front、moved-fromでは呼び出せない関数として例を示しました。std::vector、、およびを移動元で呼び出すことができる(ただし呼び出すべきではない)関数として、前提条件がないため、例を示しましたstd::vector::emptystd::vector::push_backstd::vector::reservestd::vector

しかし、それは私に考えさせられました。std::vector::push_backホストシステムで利用可能な十分な連続メモリがある必要があります。これは、std::vectorオブジェクトが実行されているシステムに関するものであるため、オブジェクトに対する要件ではありませんが、それでも私には前提条件のようです。

オブジェクトを有効であるが指定されていない状態のままにする移動コンストラクターのコンテキストは何ですか?それは、メモリ不足の可能性のある状況に適用されstd::vector::push_backますか?特に、std::vector::push_back移動前に機能していたとしたら、移動後に機能することが保証されていますか(他のプロセスがメモリを使い果たすなどの問題を無視して)?

参考:§17.6.3.1

0 投票する
4 に答える
900 参照

c++ - unique_ptr、移動コンストラクター、および常にプライベート メンバーにアクセスしようとする理由

私はこの問題に頻繁に遭遇しており、ムーブ コンストラクターが適切であると考えていますが、コピー コンストラクターが問題であり、それを非表示にするとうまくいかないようです。

コード:

エラーが発生している特定の行は次のとおりです。

コピー コンストラクター内のリンクをコピーするのではなく移動しようとしていますが、役に立ちません。ムーブ コンストラクターが合成ではなく設計されている場合、そのほうがよいでしょうか?

0 投票する
1 に答える
151 参照

c++11 - 移動コンストラクターを実行できません

C++11

move コンストラクターの使用に問題があります。という単純なコンテナ クラスがありNumber、その唯一のデータ メンバは整数です。次のコードがあります。

これは以下を出力します:

パート D の出力がないことに注意してください。パート A と B の出力は期待どおりですが、その他の出力はそうではありません。

パート C と D でこれを期待していました。

パート C の期待:

Number{n1}の部分はNumber n3{Number{n1}}一時的な名前のないNumberオブジェクトを作成することを期待していNumberましたn1Number n3次に、一時オブジェクトを使用して移動コンストラクターを呼び出すことで構築されることを期待していました。

パートDへの期待:

これはパート C に似ていますが、中括弧の代わりに括弧が使用されている点を除けば、このパートがパート C と同じように動作し、出力されることを期待していました。

質問:

実際の出力が期待と異なるのはなぜですか? また、目的の出力を得る正しい方法は何ですか?

注:これを Visual Studio でコンパイルする場合は、統一された初期化構文をサポートするために、Visual Studio 2012 用のVisual C++ コンパイラ 2012 年 11 月 CTP以降が必要です。

0 投票する
2 に答える
12555 参照

c++ - コンストラクターと継承を移動する

C++ 11 で移動コンストラクターと割り当て操作が機能する方法を理解しようとしていますが、親クラスへの委任に問題があります。

コード:

ただし、VS2012 でコンパイルして実行すると、T0 メンバーの左辺値バージョンが呼び出されることが出力に示されます。

同様の状況 (わずかに異なるテスト ケース) が移動代入で発生します。T の移動代入演算子は、T0 の「通常の」代入演算子を呼び出します。

私は何を間違っていますか?

0 投票する
2 に答える
129 参照

c++ - ムーブコンストラクターについて

3 つの質問があります。

  1. 関数 f のスコープに割り当てられた A::str のメモリ。グローバル var vec の要素に移動した後、メモリ ブロックは f の範囲外でも安全ですか?

  2. 明示的に移動コンストラクターを与えない構造体 B の場合、構造体 A のようなデフォルトのものはありますか?

3.そして、この危険な状況が STL コンテナーでは決して起こらないことを確認できますか?

0 投票する
2 に答える
461 参照

c++ - 移動コンストラクターのためにオブジェクトが削除されました

シリアル ポートから読み取る専用スレッドで実行される関数を作成しようとしています。しかし、接続をスレッドに渡すのに問題があります。コードを次の例に減らしました。

ただし、次のエラー メッセージが表示されます。

エラーメッセージは非常に明確です。移動コンストラクターの宣言により削除されたために存在しないオブジェクトを使用しようとしています。しかし、ここで何が起こっているのか、正しく行う方法はまだわかりません。誰かが私を啓発できますか?

0 投票する
1 に答える
224 参照

c++ - ベクトル クラスにはどのような ctor/代入演算子が必要ですか?

私は独自のベクトル クラス (x、y 値のコンテナー) を作成していますが、どのコンストラクター/代入演算子を自分で実装する必要があるのか​​ 、コンパイラーが提供するものを期待できるのかよくわかりません。明らかに、デフォルトの動作を持たないメソッドや自動生成されないメソッドを作成する必要があります。しかし、確かに、コンパイラがまったく同じものを生成できる場合、何かを実装しても意味がありません。

私はVisual Studio 2010を使用しています(これはC++ 11の側面で問題になる可能性があります)。また、それが重要な場合、私のクラスはテンプレートです。

現在、私は持っています:

move ctor/move operator がある場合、copy ctor/assignment operator は必要ですか?

0 投票する
1 に答える
806 参照

c++ - 統一された初期化構文で std::move を C++11 移動コンストラクターで使用する

私はこの単純なクラスを持っています:

これは gcc-4.7.2 で正常にコンパイルされますが、このバージョンを使用しようとするとエラーが発生します

なんで?

0 投票する
2 に答える
262 参照

c++ - プロパティとしてプライベート オブジェクトを持つクラスのムーブ コンストラクターと代入演算子を作成するにはどうすればよいですか?

今日はMove Constructorsを学びました。この回答を読み、その中の移動コンストラクターの例を自分のコードに適用しようとしました。

ただし、その例とは異なり、私のクラスUnicodeStringには単純な C 配列が含まれているだけではありません。これには、std::vector<>私が作成した別のクラスのインスタンスを要素とするオブジェクトが含まれています。

まず、move コンストラクターで、R-Value で渡された他のオブジェクトのベクターを盗むにはどうすればよいでしょうか。UString

次に、代入演算子でUString、メインUnicodeStringオブジェクトの s の参照と R-Value によって渡される参照を効率的に交換するにはどうすればよいですか? はプライベート プロパティであるため、別のオブジェクトから直接アクセスできないことに注意してくださいUString