問題タブ [move-semantics]

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 に答える
19647 参照

c++ - ベクトルが大きくなるときに移動セマンティクスを強制する方法は?

std::vector特定のクラスのオブジェクトがありますA。クラスは自明ではなく、コピー コンストラクタームーブ コンストラクターが定義されています。

ベクトルをAオブジェクトで満たすと (例: を使用myvec.push_back(a))、ベクトルのサイズが大きくなり、コピー コンストラクターを使用してA( const A&)、ベクトル内の要素の新しいコピーをインスタンス化します。

Aクラスのムーブコンストラクターが代わりに使用されていることをどうにかして強制できますか?

0 投票する
8 に答える
22696 参照

c++ - initializer_listおよび移動セマンティクス

要素をから移動することはできstd::initializer_list<T>ますか?

特別なコンパイラの注意が必要であり、C ++標準ライブラリの通常のコンテナのような値のセマンティクスがないためstd::intializer_list<T>、申し訳ありませんが、質問するよりも安全です。

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

c++ - unique_ptr C++03 エミュレーションの move 関数

unique_ptr の C++03 エミュレーションがどのように実装されているかを理解しようとしています。unique_ptr は std::auto_ptr に非常に似ていますが、より安全です。auto_ptr が所有権を暗黙的に (つまり、黙って) 譲渡した場合、コンパイラ エラーを吐き出します。たとえば、単純な割り当て。関数moveは、エミュレートされた unique_ptr の安全性の背後にある鍵です。

質問:

  1. 移動機能が 3 つあるのはなぜですか?
  2. 参照を受け取り、それを右辺値に変換する 3 番目の move 関数は、次のように実装 (簡略化) されています。

    /li>

上記のコードでは、T への明示的な変換は不必要に思えます。実際、Visual Studio 2010 は T への明示的な変換がなくても問題ありません。

ただし、g++、clang、Comeau は 2 番目のバージョンが好きではありません。unique_ptr<T>これらのコンパイラは、パラメーターとして取るコンストラクターがないと文句を言いdetail_unique_ptr::rv<T>ます。何故ですか?unique_ptr は、パラメーターとして受け取る (非明示的な) コンストラクターを既に定義してdetail_unique_ptr::rv<T>います。それが自動的に取得されないのはなぜですか?

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

c++ - 移動専用タイプのベクトルをリストして初期化できますか?

次のコードをGCC4.7スナップショットに渡すと、unique_ptrsをベクターにコピーしようとします。

明らかに、std::unique_ptrコピーできないため、これは機能しません。

エラー:削除された関数の使用'std :: unique_ptr <_Tp、_Dp> :: unique_ptr(const std :: unique_ptr <_Tp、_Dp>&)[with _Tp = int; _Dp = std :: default_delete; std :: unique_ptr <_Tp、_Dp> = std :: unique_ptr] '

初期化子リストからポインターをコピーしようとするGCCは正しいですか?

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

c++ - std :: move のタイプは何ですか?

このコードは期待どおりに機能します (オンラインはこちら)。の中身を盗んでいるので最後vは空っぽで空っぽではありません。wv

しかし、私auto vp=move(v)

すると動かない。代わりにコピーし、両方のベクトルは最後に空ではありません。ここに示すように。

明確化:より具体的には、 の自動派生型はvp何ですか? そうでない場合vector<int> &&、他に何が考えられますか? 2 つの例が非常に似ているにもかかわらず、なぜ異なる結果になるのでしょうか?

エクストラ:これも試しましたが、移動ではなくコピーされました

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

c++ - 「* this の右辺値参照」とは何ですか?

clang のC++11 ステータス ページで、「*this の右辺値参照」という提案に出会いました。

私は右辺値参照についてかなり読んで理解しましたが、これについては知らないと思います。また、この用語を使用して Web 上で多くのリソースを見つけることもできませんでした。

ページに提案論文へのリンクがあります: N2439 (*this への移動セマンティクスの拡張)、そこから多くの例を得ることもできません。

この機能は何ですか?

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

c++ - 移動セマンティクスができたので、特殊なstd :: swapは非推奨になりましたか?

重複の可能性:
移動セマンティクス==カスタムスワップ関数は廃止されましたか?

これはstd::swapC++11でどのように見えるかです:

もちろん、私のクラスがムーブコンストラクターとムーブ代入演算子を定義している場合、私はまだstd::swap自分の型に特化する必要がありますか、それともそれが得られるのと同じくらい効率的ですか?std::swap

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

c++ - 暗黙的に変換可能なオブジェクトを使用してムーブ オーバーロード関数を呼び出すと、コンパイル エラーが発生する

このプログラムは次を使用してコンパイルされませんclang++ test.cpp -std=c++0x:

コンパイル エラー:

なぜコンパイルされないのですか?A::operator = (A&&)コンパイラが を優先するのはなぜA::operator = (const A&)ですか?

さらに、(上記のプログラムの)while とdo notのA a = b;両方がコンパイルされるのはなぜでしょうか。A a; a = b;A a(b);

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

c++ - C ++-Boost.Promise、Boost.Unique_Future、およびMoveSemantics

ここでは、BartoszMilewskiによるいくつかのチュートリアルをフォローしています。これは非常に便利です。ただし、作成者はC ++11スレッド標準のju​​st ::thread実装(まだ持っていません)を使用しているため、チュートリアルの作成者が簡単に言うように、今のところブーストスレッドを使用することにしました。そうする。これは、シリーズの最初の3つのチュートリアルに当てはまるようですが、4番目のチュートリアルでいくつかの問題にぶつかりました。これが私のコードです:

次の行は、私が理解していない問題を提起しているようです。

コンパイラが文句を言うところ:

エラーC2248:'boost :: promise :: promise':クラス'boost::promise'で宣言されたプライベートメンバーにアクセスできません

誰かが問題が何であるかを提案できますか?

前もって感謝します!

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

c++ - VS2010バインドの実装は、移動専用タイプをサポートしていませんか?

次のコードはVisualStudio2010ではコンパイルされません(ただし、GCCでは正常に動作します)。

私が得るエラーは次のとおりです。

'std :: unique_ptr <_Ty> :: unique_ptr':クラスで宣言されたプライベートメンバーにアクセスできません' std :: unique_ptr <_Ty> '

VS2010バインドの実装が移動のみの型をサポートしていないためですか?