5

オブジェクトを共有する必要はありませんが、メモリ リークが発生しないようにしたいと考えています。この場合、shared_ptr を使用するのは正しいですか?

4

4 に答える 4

7

boostを使用している場合は、boost::ptr_vectorの方がニーズに適している可能性があります。

そうでない場合は、shared_ptr提案どおりに使用するか、ベクトルの要素を使い終わったら手動で削除することができます。

メンテナンスの観点からshared_ptrは、推奨されるソリューションになります。ただし、これによりshared_ptrパフォーマンスが低下する可能性があることに注意してください。これは、アプリケーションにとって重要な場合と重要でない場合があります。

于 2010-03-15T11:04:46.820 に答える
4

低レベルのパフォーマンス/メモリ使用量が重要な要件ではない場合 (つまり、すべてのケースの 97%)、shared_ptr を使用します。わかりやすくてわかりやすいです。

本当に物事をタイトに保ちたい、および/または所有権の意図をより正確に表現したい場合は、boost::ptr_vectorの方が良いかもしれません-しかし、クラスが他のメモリを管理していない場合は、デストラクタで手動で削除することはそれほど大きな罪ではありません私たちはときどき信じ込まされます ;-) 私は RAII の大支持者ですが、今でもときどきこれを行っています。

于 2010-03-15T11:27:04.093 に答える
2

それは少しやり過ぎですが、それに対するはるかに優れたスマートポインターはありません。また、boostのポインタコンテナを検討することもできます。

std::unique_ptrC ++ 0xでは、ニーズに近いコンテナーに格納できるようになります。

于 2010-03-15T11:04:58.720 に答える
1

Boost.PointerContainerを使用することもできます。エクスプレスの使用shared_ptrは共有所有権を表します。これで、オブジェクトがコンテナーの存続期間にバインドされていることが確実な場合は、PointerContainerが設計的に優れたオプションです(それは単語でさえありますか?)。

于 2010-03-15T11:05:18.863 に答える