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

c++ - スタックは、移動セマンティクスを使用して最上位の要素を返したり削除したりするための例外安全なメソッドを持つことができますか?

理由が値を返さないという質問への回答で、例外安全性の理由(コピーコンストラクターがスローした場合はどうなりますか)が原因であるstd::stack::pop() と主張しました。pop

@Konradは、moveセマンティクスでは、これはもはや関係がないとコメントしました。これは本当ですか?

AFAIK、moveコンストラクターは可能 throwですが、おそらくnoexceptそれを使用しても達成できます。

ボーナスポイントについては、この操作でどのスレッドセーフが保証されますか?

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

c++ - 参照の過負荷と、唯一の値渡し+ std :: move?

C ++ 0xの右辺値に関する主なアドバイスは、コンパイラーがデフォルトで実装するまで、moveコンストラクターとmove演算子をクラスに追加することです。

ただし、VC10を使用する場合、待機は失われる戦略です。自動生成は、VC10 SP1、または最悪の場合はVC11まではおそらくここにないからです。おそらく、これを待つ時間は数年で測定されます。

ここに私の問題があります。この重複したコードをすべて書くのは楽しいことではありません。そして、見るのは不快です。しかし、これは、遅いと見なされるクラスにとって、好評の負担です。数千とまではいかなくても、数百の小さなクラスではそうではありません。

::ため息::C++ 0xを使用すると、コードの記述量を増やすことはできません

そして、私は考えました。多くの人が共有していると思います。

すべてを値で渡すだけではどうでしょうか。std :: move + copy elisionはこれをほぼ最適にしませんか?

例1-典型的なPre-0xコンストラクター

短所:右辺値の無駄なコピー。

例2-推奨されるC++0x?

長所:おそらく最速です。
短所:たくさんのコード!

例3-値渡し+std:: move

長所:追加のコードはありません。
短所:ケース1と2での無駄な移動SomeClass。移動コンストラクターがないと、パフォーマンスが大幅に低下します。


どう思いますか?これは正しいです?コード削減のメリットと比較した場合、発生した移動は一般的に許容できる損失ですか?

0 投票する
11 に答える
515280 参照

c++ - 移動セマンティクスとは何ですか?

C++0xに関するScottMeyersのソフトウェアエンジニアリングラジオポッドキャストインタビューを聞き終えたところです。新機能のほとんどは私にとって理にかなっており、1つを除いて、私は実際にC++0xに興奮しています。私はまだ移動セマンティクスを取得していません...それは正確には何ですか?

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

c++ - コンストラクター/オペレーターを移動=

私はC++の新機能、つまりmoveコンストラクターと代入について学習しようとしていますが、興味深い例X::operator=(X&&)を見つけまし たが、私がまったく理解していない唯一のことは、move ctorと代入演算子(以下のコードでマークされています)の1行です。

だから私の質問は:lenght_の値をゼロに設定する必要がありますか、それともそのままにしておくことができますか?メモリリークが発生することはなく、1つの表現でafaicsが少なくなります。

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

c++ - C++0xの特別なメンバー関数

特別なメンバー関数に関するウィキペディアの記事には、ムーブコンストラクターとムーブ代入演算子への参照は含まれていません。

エントリを更新したいのですが、0x標準が何を言っているのかわかりません。

これら2つの機能に関するルールは何ですか?それらはコンパイラーによって自動的に生成されますか?もしそうならいつですか?


編集:ウィキペディアのページを更新しました。誰かがそれを感じたら、それを形に編集してコミュニティを助けてください(必要な場合)。

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

c++ - std::move はスライスになりますか?

たとえば、

deriv はタイプにスライスされunique_ptr<Base>ますか?

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

c++ - 動くctorと動くdtor

Move constructor/operator=で尋ねたように、しばらくして、その質問に対する正しい答えに同意し、受け入れました。ちょうど考えていたのですが、移動時に呼び出される「移動デストラクタ」のようなものがあると便利でしょうか? move ctorまたはoperator =を使用するたびにオブジェクト。
このようにして、move dtor でのみ指定する必要があり、move コンストラクターによって使用された後にオブジェクトを無効にする方法を指定する必要があります。このセマンティクスがないと、 move ctor または operator= を記述するたびに、移動したオブジェクトを無効にする方法を明示的に記述する必要があります (コードの繰り返し/エラーの紹介)。この件に関するご意見をお待ちしております。

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

c++ - std :: move()とは何ですか?いつ使用する必要がありますか?

  1. それは何ですか?
  2. それは何をするためのものか?
  3. いつ使用する必要がありますか?

良いリンクをいただければ幸いです。

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

c++ - 移動コンストラクターのみを提供するのは悪い形式ですか?

関数から型のコピー不可能なオブジェクトを返したいFooです。これは基本的に、呼び出し元が一連のアクションを実行するために使用するヘルパー オブジェクトであり、アクションの完了後にデストラクタを使用してクリーンアップを実行します。

右辺値参照が出現する前は、 ashared_ptr<Foo>または同様のものを返していました。右辺値参照では、コンストラクターとコピー コンストラクターをプライベートにし、唯一のパブリック コンストラクターをムーブ コンストラクターにするという別のオプションがあります。Foo次のようになります。

私の質問は、これを行うのが悪い形なのか、それとも合理的に見えるのかということです。これが問題を引き起こしたり、読みにくくなったりする理由は考えられませんが、右辺値参照に関してはまだ初心者なので、考えていない考慮事項があるかもしれません。

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

c++ - スレッドのベクトルに move を使用するカスタム アロケーター

私は現在、C++ での同時実行性について学んでおり、C++0x で可能になると信じているスレッドのベクトルを使用することに出会いました。ただし、現在のコンパイラにはムーブ対応コンテナーが実装されていないようで、 が削除されているためにエラーが生成std::thread::thread(const std::thread&)されます。つまり、ムーブ コンストラクター/ムーブ割り当てはstd::thread.

を使用してカスタムアロケーターを作成することで、この問題を回避できると考えているのは正しいですか

それよりも

? または、このテーマの他のバリエーション (おそらく MyAllocator::construct のオーバーロードを使用)。

注意: これは主に、短期間の教育的な演習であり、コンテナ内のスレッドをいじるのに十分な作業を実行することを目的としています。MyAllocatorこのコンテキストでのみ使用します。ただし、これが実装されている可能性のあるライブラリを教えてください。ソースを突き詰めることができます。