問題タブ [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++ - 基本クラスのMove Constructorを呼び出すMove Constructor
クラスを任意のウィンドウ ハンドル (HWND、HFONT など) にアタッチすることを基本的にまとめ、ポリシー クラスを使用してアタッチ/デタッチおよび破棄する基本クラスがあります。
クラスをコピーしたくないので、コピー コンストラクターをプライベート (実装なし) と宣言しましたが、移動は許可されていることに注意してください。
私Window
のクラスはこれから派生します:
もう一度、default/copy ctors をコピーします。移動コンストラクターの実装は次のとおりです。
ただし、コンパイル中に移動コンストラクター実装の最初の行で次のエラーが発生します。
そのため、移動コンストラクターではなく、コピー コンストラクター (プライベートと宣言しました) を呼び出そうとしているように見えます。ここに欠けている簡単なものはありますか?
前もって感謝します。
編集: mtor を非 const に変更したため、エラーが残ります。EDIT2: Visual C++ 2010 を使用しています。
c++ - fstream の移動を実装する C++0x ライブラリ
How to return an fstream (C++0x) への答えを見つけた後、fstreams の移動 (またはスワップ) を実装する現在の c++0x ライブラリがあるかどうか疑問に思っていました ( gcc (27.9)はそうではありません) 。 . それも無料ならいいのに。
または、値によって関数から fstreams に戻る他の方法はありますか?
私はlibcxxをコンパイルしようとしましたが、それは非常に linux/mac 固有のようで、コンパイルできない Solaris でも実行する必要があります。
この問題を回避することはできます (たとえば、参照によって戻る) が、呼び出し元のコードを変更する必要のない解決策がある場合に備えて、これを尋ねると思いました。
c++ - デフォルト/コピー/ムーブctorおよびコピー/ムーブ代入演算子の自動生成の条件は?
コンパイラーがデフォルトのコンストラクター、コピーコンストラクター、および代入演算子を通常自動生成する条件で、メモリを更新したいと思います。
いくつかのルールがあったことを思い出しますが、覚えていません。また、信頼できるリソースをオンラインで見つけることができません。誰か助けてもらえますか?
c++11 - 移動コンストラクターは、メンバー変数に対して暗黙的に機能しませんか?
なぜこれを行わないのですか:(vs2010)クラス内でベクトルを移動しますか?
これは、std :: vector(およびその他の移動可能なクラス)を使用するすべてのクラスに、明示的な移動コンストラクターと割り当てが必要であることを意味しますか?
c++11 - コンストラクターと const メンバー変数を移動する
特に C 関数をクラスにラップする場合は、const メンバー変数のアイデアが気に入っています。コンストラクターは、オブジェクトの存続期間全体にわたって有効なリソース ハンドル (ファイル記述子など) を取得し、最終的にデストラクタがそれを閉じます。(それがRAIIの考え方ですよね?)
しかし、C++0x ムーブ コンストラクターを使用すると、問題が発生します。デストラクタは「アンロードされた」オブジェクトでも呼び出されるため、リソース ハンドルのクリーンアップを防ぐ必要があります。メンバー変数は const であるため、値 -1 または INVALID_HANDLE (または同等の値) を割り当てて、何もしないことをデストラクタに示す方法がありません。
オブジェクトの状態が別のオブジェクトに移動した場合、デストラクタが呼び出されないようにする方法はありますか?
例:
c++ - 移動コンストラクター内で盗む
おもちゃクラスのムーブ コンストラクターの実装中に、次のパターンに気付きました。
パターンは明らかに次のとおりです。
そこで、スティーリングの冗長性を減らし、エラーを起こしにくくするプリプロセッサ マクロを作成しました。
実装は次のようになります。
これには欠点がありますか?プリプロセッサを必要としないよりクリーンなソリューションはありますか?
c++ - C++0x でのコンストラクターのパラメーターの受け渡し/移動
n 個のパラメーターを持つコンストラクターがある場合、その引数は右辺値と左辺値にすることができます。可能な右辺値/左辺値の組み合わせごとに 2^n コンストラクターを記述せずに、右辺値の移動セマンティクスでこれをサポートすることは可能ですか?
c++ - 明示的な移動コンストラクター?
このexplicit
キーワードは、コピーコンストラクターを除き、1つの引数で呼び出すことができるほとんどすべて のコンストラクターに推奨されます。
コピーコンストラクターの場合、これには用途があります(関数呼び出し、returnなどによる暗黙的なコピーを禁止するため)が、通常必要なものではありません。
移動コンストラクターはどうですか?それらを明示的にするための合理的なユースケースはありますか?ここでの良い習慣は何ですか?
c++ - std::move実現
マイクロソフトから次のスニペットを入手しました
..。
「エラーC2440:'return':'remote_integer'から'remote_integer&&'に変換できません」というエラーが表示されます。
コンパイラで何か変更されましたか?std :: moveを使用すると、すべてがうまくいきます。
c++ - C++ コンテナー (std::list など) を初期化すると、コピー コンストラクターが呼び出されますか?
list< vector<char> >
たとえば、使用などのSTLコンテナを初期化すると、my_list.push_back(vector<char>(5000, 'T'))
これは構築後にコピーされますか? それとも、コンパイラーはlist< vector<char> >
自身の内部でコンストラクターを呼び出しますか?