問題タブ [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.
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
。移動コンストラクターがないと、パフォーマンスが大幅に低下します。
どう思いますか?これは正しいです?コード削減のメリットと比較した場合、発生した移動は一般的に許容できる損失ですか?
c++ - 移動セマンティクスとは何ですか?
C++0xに関するScottMeyersのソフトウェアエンジニアリングラジオポッドキャストインタビューを聞き終えたところです。新機能のほとんどは私にとって理にかなっており、1つを除いて、私は実際にC++0xに興奮しています。私はまだ移動セマンティクスを取得していません...それは正確には何ですか?
c++ - コンストラクター/オペレーターを移動=
私はC++の新機能、つまりmoveコンストラクターと代入について学習しようとしていますが、興味深い例X::operator=(X&&)
を見つけまし たが、私がまったく理解していない唯一のことは、move ctorと代入演算子(以下のコードでマークされています)の1行です。
だから私の質問は:lenght_の値をゼロに設定する必要がありますか、それともそのままにしておくことができますか?メモリリークが発生することはなく、1つの表現でafaicsが少なくなります。
c++ - C++0xの特別なメンバー関数
特別なメンバー関数に関するウィキペディアの記事には、ムーブコンストラクターとムーブ代入演算子への参照は含まれていません。
エントリを更新したいのですが、0x標準が何を言っているのかわかりません。
これら2つの機能に関するルールは何ですか?それらはコンパイラーによって自動的に生成されますか?もしそうならいつですか?
編集:ウィキペディアのページを更新しました。誰かがそれを感じたら、それを形に編集してコミュニティを助けてください(必要な場合)。
c++ - std::move はスライスになりますか?
たとえば、
deriv はタイプにスライスされunique_ptr<Base>
ますか?
c++ - 動くctorと動くdtor
Move constructor/operator=で尋ねたように、しばらくして、その質問に対する正しい答えに同意し、受け入れました。ちょうど考えていたのですが、移動時に呼び出される「移動デストラクタ」のようなものがあると便利でしょうか? move ctorまたはoperator =を使用するたびにオブジェクト。
このようにして、move dtor でのみ指定する必要があり、move コンストラクターによって使用された後にオブジェクトを無効にする方法を指定する必要があります。このセマンティクスがないと、 move ctor または operator= を記述するたびに、移動したオブジェクトを無効にする方法を明示的に記述する必要があります (コードの繰り返し/エラーの紹介)。この件に関するご意見をお待ちしております。
c++ - std :: move()とは何ですか?いつ使用する必要がありますか?
- それは何ですか?
- それは何をするためのものか?
- いつ使用する必要がありますか?
良いリンクをいただければ幸いです。
c++ - 移動コンストラクターのみを提供するのは悪い形式ですか?
関数から型のコピー不可能なオブジェクトを返したいFoo
です。これは基本的に、呼び出し元が一連のアクションを実行するために使用するヘルパー オブジェクトであり、アクションの完了後にデストラクタを使用してクリーンアップを実行します。
右辺値参照が出現する前は、 ashared_ptr<Foo>
または同様のものを返していました。右辺値参照では、コンストラクターとコピー コンストラクターをプライベートにし、唯一のパブリック コンストラクターをムーブ コンストラクターにするという別のオプションがあります。Foo
次のようになります。
私の質問は、これを行うのが悪い形なのか、それとも合理的に見えるのかということです。これが問題を引き起こしたり、読みにくくなったりする理由は考えられませんが、右辺値参照に関してはまだ初心者なので、考えていない考慮事項があるかもしれません。
c++ - スレッドのベクトルに move を使用するカスタム アロケーター
私は現在、C++ での同時実行性について学んでおり、C++0x で可能になると信じているスレッドのベクトルを使用することに出会いました。ただし、現在のコンパイラにはムーブ対応コンテナーが実装されていないようで、 が削除されているためにエラーが生成std::thread::thread(const std::thread&)
されます。つまり、ムーブ コンストラクター/ムーブ割り当てはstd::thread
.
を使用してカスタムアロケーターを作成することで、この問題を回避できると考えているのは正しいですか
それよりも
? または、このテーマの他のバリエーション (おそらく MyAllocator::construct のオーバーロードを使用)。
注意: これは主に、短期間の教育的な演習であり、コンテナ内のスレッドをいじるのに十分な作業を実行することを目的としています。MyAllocator
このコンテキストでのみ使用します。ただし、これが実装されている可能性のあるライブラリを教えてください。ソースを突き詰めることができます。