std::unique_ptr
の推奨される使用法は、具体的にどこで、いつ、どのように使用するのが最も適切か?
私は発見した:
もう知っている:
std::unique_ptr
はstd::auto_ptr
の代わりとしてC++ 11で開発されましたstd::unique_ptr
には参照カウントがなく、ポイントする「所有」オブジェクトがあるstd::unique_ptr
のコピー/割り当てはありませんstd::unique_ptr
はgo to構造です私が知りたいこと:
std::unique_ptr
を使用している(一意性以外)std::unique_ptr
をあまり好ましくないものにしますかstd::shared_ptr
がほとんどすべての状況で動的メモリ管理に十分である場合、なぜ私に自由にstd::unique_ptr
の問題があるのですか(ここでも、他の理論的には、共有したい場合を除いて、すべてのポインタにunique_ptr
を使用する必要があります。その場合、shared_ptr
を使用する必要があります。その理由は、unique_ptr
は参照をカウントしないため、オーバーヘッドが少ないためです。
ただし、unique_ptr
は移動可能ですがコピーはできません。そのため、メンバー変数として使用すると、コードを追加する必要があります(例:moveコンストラクター)。値で渡すと、std::move
などを使用する必要があります。その結果、一部の人々はshared_ptr
を怠惰な状態で使用します。これは簡単なためであり、パフォーマンスの違いはアプリにとって重要ではない可能性があります。
最後に、生のポインタは観察には問題ありません-寿命に影響を与えることのないポインタの使用。正しいポインタタイプを慎重に選択することで、コードを読む人は、あなたが何をしているかをよく理解できます。詳しくは、Herb Sutterのエッセイ Elements of C++ Style 、特に「削除しない」セクションを参照してください。