47

具体的にはstd::unique_ptr、どこで、いつ、どのように使用するのが最適ですか?

私は発見した:

unique_ptr のパフォーマンスについて

もう知っている:

  1. std::unique_ptrの代替として C++11 で開発されました。std::auto_ptr
  2. 参照カウントがなく、それstd::unique_ptrが指すオブジェクトを「所有」していること
  3. コピー/割り当てはありませんstd::unique_ptr
  4. 一意のポインターが必要な場合std::unique_ptrは、構造体に移動します

私が知りたいこと:

  1. std::unique_ptr他の何かよりも(一意性以外の)好ましいものを使用して
    いますか? この状況で私は何を得ますか?
  2. もしそうなら、いつ、どのような状況で?
  3. 移動セマンティクスの必要性を考えると、これは 全体std::unique_ptr的に不利になるでしょうか?
  4. ほぼすべての状況で動的メモリ管理に十分である場合std::shared_ptr、なぜ自由に使えることがstd::unique_ptr問題になるのでしょうか (ここでも、
    一意性以外に)?
4

1 に答える 1

23

理論的には、unique_ptr共有することがわかっている場合を除いて、すべてのポインターにを使用する必要があります。共有する場合は、を使用する必要がありますshared_ptr。その理由は、unique_ptr参照をカウントしないため、オーバーヘッドが少ないためです。

ただし、aunique_ptrは移動可能ですがコピー可能ではないため、メンバー変数として1つを使用すると、より多くのコード(moveコンストラクターなど)を作成する必要があります。値を1つ渡すと、使用する必要がありますstd::move。その結果、一部の人々shared_ptrは怠惰を利用します。なぜなら、それは簡単であり、パフォーマンスの違いは彼らのアプリにとって重要ではないかもしれないからです。

最後に、生のポインタは観察に適しています-寿命に影響を与えることのないポインタの使用。正しいポインタタイプを注意深く選択することで、コードを読む人にあなたが何をしているかをよく理解させることができます。詳細については、ハーブサッターのエッセイ「C ++スタイルの要素」、特に「削除なし」のセクションを参照してください。

于 2013-03-18T12:40:30.607 に答える