問題タブ [emplace]
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++ - unique_ptrs のコンテナーで emplace_back を使用しても安全ですか?
次の点を考慮してください。
ベクトルで再割り当てが発生し、それが失敗した場合 ( をスローstd::bad_alloc
)、私は「安全」ですか、それともリークしint
ますか?
C++11 23.3.6.5 [vector.modifiers]/1 言います:
コピー コンストラクター、ムーブ コンストラクター、代入演算子、ムーブ代入演算子以外によって、
T
または任意のInputIterator
操作によって例外がスローされた場合、影響はありません。
これは、これが潜在的な問題であることを示しているようです。つまり、「影響がない」場合、unique_ptr
構築されたものはありません。そのため、そのポインタに依存するデストラクタの動作delete
は発生しません。(これは、s のemplace_back
コンテナーに対して禁止する必要があることを示している可能性がありますunique_ptr
)
c++ - PODの導入
POD で定置は可能ですか? Visual Studio 2012 では動作しないようです:
これは Visual Studio 2012 の単なる欠点ですか、それとも C++11 では単に POD を使用できないのでしょうか?
c++ - c++ マップでの挿入対 emplace 対 operator[]
初めてマップを使用していますが、要素を挿入する方法がたくさんあることに気付きました。emplace()
、operator[]
またはに加えて、またはを使用するinsert()
ようなバリアントを使用できます。それらすべてに関する多くの情報と特定のケースに関する質問がありますが、全体像を理解することはまだできません。だから、私の2つの質問は次のとおりです。value_type
make_pair
それらのそれぞれが他のものよりも優れている点は何ですか?
標準に emplace を追加する必要はありましたか? それなしでは不可能だったことはありますか?
c++11 - emplace* を使用する場合と push/insert を使用する場合
私は、コンテナの emplace 関数の一般的な考え方を知っています(「新しい要素をその場で構築する」)。
私の質問は、それが何をするかではなく、Effective C++ 11 のようなものです。
いつ使用するかを決定するための適切なルールは何std::vector
ですか
? emplace_back()
push_back()
c++ - 戻り値を配置する方法はありますか?
バージョン 2は常にバージョン 1より高速です。
実際には、getRange()
複数のクラスで使用されています。バージョン 2を適用すると、多くのコードの重複が発生します。
また、一部のクラスでは の代わりに を使用するため、ranges
への非 const 参照として渡すことはできません。複数のオーバーロードを作成し、コードの重複を増やす必要があります。getRange()
std::stack
std::vector
戻り値を配置する一般的な方法/イディオムはありますか?
c++ - RVO、移動セマンティクスと最適なコードへの闘い
正しく理解できれば、移動セマンティクスにより、一時的な名前のないオブジェクトからリソースを移動して再利用できます。RVO では、先行するムーブ セマンティクスはさらに進んで、オブジェクト全体を「盗み」、余分なコンストラクターの呼び出しと代入/コピー機能を回避します。
呼び出されたコンストラクターが最終的な左辺値ターゲットのアドレスを直接使用して、ユーザーが必要とする場所にデータを直接配置する場合、これは私には少し直感的ではありませんか?
つまり、「このオブジェクトをこの場所に作成する」は、「このオブジェクトをどこかに作成してから、適切な場所にコピーする」よりも少し直感的に思えます。