15

だから、生の代わりにスマートポインタを使いたいと思います.SOのほとんどすべてのトピックはBoostライブラリについて述べています。しかし、 std には や などがstd::auto_ptrありstd::shared_ptrます。ブーストする理由 違いはなんですか?

実装の違いではなく、Boost ポインタを使う理由についての質問でした。私は、回答の日付と文脈を含む与えられた回答が合理的に役立つと思います。Boost ポインタが std にどのように追加されたかを理解するのに役立ちます。

4

3 に答える 3

26

基本的にBoostがshared_ptr最初に行いました。C++11の新しいコンテナクラスの多くはずっと前にBoostにあったことに気付くかもしれません。このパターンは、C++標準の次のリビジョンでも継続されると思います。Boostは、C++11を話さない古いC++コンパイラをサポートします。これは大きな利点です。

ちなみに、std::auto_ptrはC ++ 11で非推奨になりました。これにより、std::shared_ptrstd::unique_ptr代わりに、どちらも大幅に便利になります。

于 2012-11-07T10:39:07.490 に答える
5

次のスタック オーバーフローの質問を確認してください。

  1. 標準の <memory> ファイルの boost::shared_ptr と std::shared_ptr の違い
  2. さまざまな種類の shared_ptr の違い
于 2012-11-07T10:48:49.487 に答える
4

どちらstd::shared_ptrboost:shared_ptr参照カウント ポインターです。代わりに、std::auto_ptr の動作は大きく異なります。std::shared_ptrとの違いboost:shared_ptrは非常に小さく、ほとんどが歴史的なものです。C++11 より前はstd::shared_ptr、 しかありませんでしboost:shared_ptrた。C++11 が設計されたとき、それらはboost:shared_ptrモデルとして採用されました。

言及されたすべてのスマートポインターには、ポイントの有効期間管理が正しく行われるようにする独自のメカニズムがあるという共通点があります。auto_ptrのインスタンスが複数ある場合、auto_ptrそのうちの 1 つだけが実際のオブジェクトへのポインターを含むように機能します。auto_ptr別の からを作成するauto_ptrと、新しい は オブジェクトを指し、古いものは を指しますNULL。一方、同じオブジェクトを共有するshared_ptr複数のインスタンスが存在する可能性がありshared_ptr、最後のインスタンスが範囲外になった場合にのみ、オブジェクトが削除されます..

C++11 には に似たポインタ型std::auto_ptr、つまりstd::unique_ptrがありますが、重要な違いがいくつかあります 。 std::auto_ptr から std::unique_ptrも参照してください。

参考文献:

于 2012-11-07T10:40:19.863 に答える