オブジェクトを共有する必要はありませんが、メモリ リークが発生しないようにしたいと考えています。この場合、shared_ptr を使用するのは正しいですか?
4 に答える
boostを使用している場合は、boost::ptr_vectorの方がニーズに適している可能性があります。
そうでない場合は、shared_ptr
提案どおりに使用するか、ベクトルの要素を使い終わったら手動で削除することができます。
メンテナンスの観点からshared_ptr
は、推奨されるソリューションになります。ただし、これによりshared_ptr
パフォーマンスが低下する可能性があることに注意してください。これは、アプリケーションにとって重要な場合と重要でない場合があります。
低レベルのパフォーマンス/メモリ使用量が重要な要件ではない場合 (つまり、すべてのケースの 97%)、shared_ptr を使用します。わかりやすくてわかりやすいです。
本当に物事をタイトに保ちたい、および/または所有権の意図をより正確に表現したい場合は、boost::ptr_vectorの方が良いかもしれません-しかし、クラスが他のメモリを管理していない場合は、デストラクタで手動で削除することはそれほど大きな罪ではありません私たちはときどき信じ込まされます ;-) 私は RAII の大支持者ですが、今でもときどきこれを行っています。
それは少しやり過ぎですが、それに対するはるかに優れたスマートポインターはありません。また、boostのポインタコンテナを検討することもできます。
std::unique_ptr
C ++ 0xでは、ニーズに近いコンテナーに格納できるようになります。
Boost.PointerContainerを使用することもできます。エクスプレスの使用shared_ptr
は共有所有権を表します。これで、オブジェクトがコンテナーの存続期間にバインドされていることが確実な場合は、PointerContainerが設計的に優れたオプションです(それは単語でさえありますか?)。