ご覧のとおり、スマートポインターは多くの実際のC ++プロジェクトで広く使用されています。
ある種のスマートポインターはRAIIと所有権の移行をサポートするために明らかに有益ですが、プログラマーが割り当てをそれほど考慮する必要がないように、「ガベージコレクション」の方法として共有ポインターをデフォルトで使用する傾向もあります。
Boehm GCのような適切なガベージコレクターを統合するよりも、共有ポインターの方が人気があるのはなぜですか?(または、実際のGCよりも人気があることにまったく同意しますか?)
参照カウントに対する従来のGCの2つの利点について知っています。
- 従来のGCアルゴリズムには、参照サイクルに関する問題はありません。
- 参照カウントは通常、適切なGC よりも遅くなります。
参照カウントスマートポインターを使用する理由は何ですか?
std::unique_ptr
で十分であり、実行時のパフォーマンスの観点から、生のポインタよりもオーバーヘッドがゼロです。std::shared_ptr
どこでも使用することで、所有権のセマンティクスもあいまいになり、自動リソース管理以外のスマートポインターの主な利点の1つが失われます-コードの背後にある意図を明確に理解します。