問題タブ [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 投票する
3 に答える
7508 参照

c++ - 基本クラスのMove Constructorを呼び出すMove Constructor

クラスを任意のウィンドウ ハンドル (HWND、HFONT など) にアタッチすることを基本的にまとめ、ポリシー クラスを使用してアタッチ/デタッチおよび破棄する基本クラスがあります。

クラスをコピーしたくないので、コピー コンストラクターをプライベート (実装なし) と宣言しましたが、移動許可されていることに注意してください。

Windowのクラスはこれから派生します:

もう一度、default/copy ctors をコピーします。移動コンストラクターの実装は次のとおりです。

ただし、コンパイル中に移動コンストラクター実装の最初の行で次のエラーが発生します。

そのため、移動コンストラクターではなく、コピー コンストラクター (プライベートと宣言しました) を呼び出そうとしているように見えます。ここに欠けている簡単なものはありますか?

前もって感謝します。

編集: mtor を非 const に変更したため、エラーが残ります。EDIT2: Visual C++ 2010 を使用しています。

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

c++ - fstream の移動を実装する C++0x ライブラリ

How to return an fstream (C++0x) への答えを見つけた後、fstreams の移動 (またはスワップ) を実装する現在の c++0x ライブラリがあるかどうか疑問に思っていました ( gcc (27.9)はそうではありません) 。 . それも無料ならいいのに。

または、値によって関数から fstreams に戻る他の方法はありますか?

私はlibcxxをコンパイルしようとしましたが、それは非常に linux/mac 固有のようで、コンパイルできない Solaris でも実行する必要があります。

この問題を回避することはできます (たとえば、参照によって戻る) が、呼び出し元のコードを変更する必要のない解決策がある場合に備えて、これを尋ねると思いました。

0 投票する
3 に答える
39039 参照

c++ - デフォルト/コピー/ムーブctorおよびコピー/ムーブ代入演算子の自動生成の条件は?

コンパイラーがデフォルトのコンストラクター、コピーコンストラクター、および代入演算子を通常自動生成する条件で、メモリを更新したいと思います。

いくつかのルールがあったことを思い出しますが、覚えていません。また、信頼できるリソースをオンラインで見つけることができません。誰か助けてもらえますか?

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

c++11 - 移動コンストラクターは、メンバー変数に対して暗黙的に機能しませんか?

なぜこれを行わないのですか:(vs2010)クラス内でベクトルを移動しますか?

これは、std :: vector(およびその他の移動可能なクラス)を使用するすべてのクラスに、明示的な移動コンストラクターと割り当てが必要であることを意味しますか?

0 投票する
5 に答える
10745 参照

c++11 - コンストラクターと const メンバー変数を移動する

特に C 関数をクラスにラップする場合は、const メンバー変数のアイデアが気に入っています。コンストラクターは、オブジェクトの存続期間全体にわたって有効なリソース ハンドル (ファイル記述子など) を取得し、最終的にデストラクタがそれを閉じます。(それがRAIIの考え方ですよね?)

しかし、C++0x ムーブ コンストラクターを使用すると、問題が発生します。デストラクタは「アンロードされた」オブジェクトでも呼び出されるため、リソース ハンドルのクリーンアップを防ぐ必要があります。メンバー変数は const であるため、値 -1 または INVALID_HANDLE (または同等の値) を割り当てて、何もしないことをデストラクタに示す方法がありません。

オブジェクトの状態が別のオブジェクトに移動した場合、デストラクタが呼び出されないようにする方法はありますか?

例:

0 投票する
3 に答える
823 参照

c++ - 移動コンストラクター内で盗む

おもちゃクラスのムーブ コンストラクターの実装中に、次のパターンに気付きました。

パターンは明らかに次のとおりです。

そこで、スティーリングの冗長性を減らし、エラーを起こしにくくするプリプロセッサ マクロを作成しました。

実装は次のようになります。

これには欠点がありますか?プリプロセッサを必要としないよりクリーンなソリューションはありますか?

0 投票する
3 に答える
6066 参照

c++ - C++0x でのコンストラクターのパラメーターの受け渡し/移動

n 個のパラメーターを持つコンストラクターがある場合、その引数は右辺値と左辺値にすることができます。可能な右辺値/左辺値の組み合わせごとに 2^n コンストラクターを記述せずに、右辺値の移動セマンティクスでこれをサポートすることは可能ですか?

0 投票する
5 に答える
5646 参照

c++ - 明示的な移動コンストラクター?

このexplicitキーワードは、コピーコンストラクターを除き、1つの引数で呼び出すことができるほとんどすべて のコンストラクターに推奨されます。

コピーコンストラクターの場合、これには用途があります(関数呼び出し、returnなどによる暗黙的なコピーを禁止するため)が、通常必要なものではありません。

移動コンストラクターはどうですか?それらを明示的にするための合理的なユースケースはありますか?ここでの良い習慣は何ですか?

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

c++ - std::move実現

マイクロソフトから次のスニペットを入手しました

..。

「エラーC2440:'return':'remote_integer'から'remote_integer&&'に変換できません」というエラーが表示されます。

コンパイラで何か変更されましたか?std :: moveを使用すると、すべてがうまくいきます。

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

c++ - C++ コンテナー (std::list など) を初期化すると、コピー コンストラクターが呼び出されますか?

list< vector<char> >たとえば、使用などのSTLコンテナを初期化すると、my_list.push_back(vector<char>(5000, 'T'))これは構築後にコピーされますか? それとも、コンパイラーはlist< vector<char> >自身の内部でコンストラクターを呼び出しますか?