問題タブ [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.
c++ - コンストラクターの署名を移動する
この参照からconst
、移動コンストラクターとして右辺値を許可します
可動オブジェクトはどのようにできますconst
か? これが技術的に許可されていたとしても、そのような宣言が役立つ場合はありますか?
c++ - std :: vector :: push_backには前提条件がありますか?
Andrzejのmoveコンストラクターの記事へのコメントで、moved fromオブジェクトは、前提条件を持たない任意のメンバー関数を呼び出すことができると投稿しました。ベクトルが空でないという前提条件があるためstd::vector::front
、moved-fromでは呼び出せない関数として例を示しました。std::vector
、、およびを移動元で呼び出すことができる(ただし呼び出すべきではない)関数として、前提条件がないため、例を示しましたstd::vector::empty
。std::vector::push_back
std::vector::reserve
std::vector
しかし、それは私に考えさせられました。std::vector::push_back
ホストシステムで利用可能な十分な連続メモリがある必要があります。これは、std::vector
オブジェクトが実行されているシステムに関するものであるため、オブジェクトに対する要件ではありませんが、それでも私には前提条件のようです。
オブジェクトを有効であるが指定されていない状態のままにする移動コンストラクターのコンテキストは何ですか?それは、メモリ不足の可能性のある状況に適用されstd::vector::push_back
ますか?特に、std::vector::push_back
移動前に機能していたとしたら、移動後に機能することが保証されていますか(他のプロセスがメモリを使い果たすなどの問題を無視して)?
参考:§17.6.3.1
c++ - unique_ptr、移動コンストラクター、および常にプライベート メンバーにアクセスしようとする理由
私はこの問題に頻繁に遭遇しており、ムーブ コンストラクターが適切であると考えていますが、コピー コンストラクターが問題であり、それを非表示にするとうまくいかないようです。
コード:
エラーが発生している特定の行は次のとおりです。
コピー コンストラクター内のリンクをコピーするのではなく移動しようとしていますが、役に立ちません。ムーブ コンストラクターが合成ではなく設計されている場合、そのほうがよいでしょうか?
c++11 - 移動コンストラクターを実行できません
C++11
move コンストラクターの使用に問題があります。という単純なコンテナ クラスがありNumber
、その唯一のデータ メンバは整数です。次のコードがあります。
と
と
これは以下を出力します:
パート D の出力がないことに注意してください。パート A と B の出力は期待どおりですが、その他の出力はそうではありません。
パート C と D でこれを期待していました。
パート C の期待:
Number{n1}
の部分はNumber n3{Number{n1}}
一時的な名前のないNumber
オブジェクトを作成することを期待していNumber
ましたn1
。Number n3
次に、一時オブジェクトを使用して移動コンストラクターを呼び出すことで構築されることを期待していました。
パートDへの期待:
これはパート C に似ていますが、中括弧の代わりに括弧が使用されている点を除けば、このパートがパート C と同じように動作し、出力されることを期待していました。
質問:
実際の出力が期待と異なるのはなぜですか? また、目的の出力を得る正しい方法は何ですか?
注:これを Visual Studio でコンパイルする場合は、統一された初期化構文をサポートするために、Visual Studio 2012 用のVisual C++ コンパイラ 2012 年 11 月 CTP以降が必要です。
c++ - コンストラクターと継承を移動する
C++ 11 で移動コンストラクターと割り当て操作が機能する方法を理解しようとしていますが、親クラスへの委任に問題があります。
コード:
ただし、VS2012 でコンパイルして実行すると、T0 メンバーの左辺値バージョンが呼び出されることが出力に示されます。
同様の状況 (わずかに異なるテスト ケース) が移動代入で発生します。T の移動代入演算子は、T0 の「通常の」代入演算子を呼び出します。
私は何を間違っていますか?
c++ - ムーブコンストラクターについて
3 つの質問があります。
関数 f のスコープに割り当てられた A::str のメモリ。グローバル var vec の要素に移動した後、メモリ ブロックは f の範囲外でも安全ですか?
明示的に移動コンストラクターを与えない構造体 B の場合、構造体 A のようなデフォルトのものはありますか?
3.そして、この危険な状況が STL コンテナーでは決して起こらないことを確認できますか?
c++ - 移動コンストラクターのためにオブジェクトが削除されました
シリアル ポートから読み取る専用スレッドで実行される関数を作成しようとしています。しかし、接続をスレッドに渡すのに問題があります。コードを次の例に減らしました。
ただし、次のエラー メッセージが表示されます。
エラーメッセージは非常に明確です。移動コンストラクターの宣言により削除されたために存在しないオブジェクトを使用しようとしています。しかし、ここで何が起こっているのか、正しく行う方法はまだわかりません。誰かが私を啓発できますか?
c++ - ベクトル クラスにはどのような ctor/代入演算子が必要ですか?
私は独自のベクトル クラス (x、y 値のコンテナー) を作成していますが、どのコンストラクター/代入演算子を自分で実装する必要があるのか 、コンパイラーが提供するものを期待できるのかよくわかりません。明らかに、デフォルトの動作を持たないメソッドや自動生成されないメソッドを作成する必要があります。しかし、確かに、コンパイラがまったく同じものを生成できる場合、何かを実装しても意味がありません。
私はVisual Studio 2010を使用しています(これはC++ 11の側面で問題になる可能性があります)。また、それが重要な場合、私のクラスはテンプレートです。
現在、私は持っています:
move ctor/move operator がある場合、copy ctor/assignment operator は必要ですか?
c++ - 統一された初期化構文で std::move を C++11 移動コンストラクターで使用する
私はこの単純なクラスを持っています:
これは gcc-4.7.2 で正常にコンパイルされますが、このバージョンを使用しようとするとエラーが発生します
なんで?
c++ - プロパティとしてプライベート オブジェクトを持つクラスのムーブ コンストラクターと代入演算子を作成するにはどうすればよいですか?
今日はMove Constructorsを学びました。この回答を読み、その中の移動コンストラクターの例を自分のコードに適用しようとしました。
ただし、その例とは異なり、私のクラスUnicodeString
には単純な C 配列が含まれているだけではありません。これには、std::vector<>
私が作成した別のクラスのインスタンスを要素とするオブジェクトが含まれています。
まず、move コンストラクターで、R-Value で渡された他のオブジェクトのベクターを盗むにはどうすればよいでしょうか。UString
次に、代入演算子でUString
、メインUnicodeString
オブジェクトの s の参照と R-Value によって渡される参照を効率的に交換するにはどうすればよいですか? はプライベート プロパティであるため、別のオブジェクトから直接アクセスできないことに注意してください。UString