2012-11-07 8 views
9

私は、生の代わりにスマートポインタを使いたいと思っています。しかし、stdはstd::auto_ptrstd::shared_ptrのようなものです。 なぜブースト?違いはなんですか?ブーストスマートポインタとスタンダードスマートポインタの違いは何ですか?

+0

のstd :: auto_ptrをは 'のstd :: shared_ptr'など(STD'を除き、:: auto_ptrは同じように、 –

+0

新しいスマートポインタところで廃止されました')は、Boostで同じ名前の構造の後にモデル化されました。 –

+0

あなたが言及したそれらのSO項目の日付をチェックしてください。 'boost :: shared_ptr'のようないくつかの' boost 'スマートポインタは、昨年だけ標準で導入されました(したがって' std :: shared_ptr'となりました)。 – Gorpik

答えて

17

基本的にブーストはshared_ptrでした。 C++ 11の新しいコンテナクラスの多くは、ずっと前にBoostにあったことに気付くかもしれません。私はこのパターンがC++標準の次の改訂版でも続くことを期待しています。 Boostは、C++ 11を話さない古いC++コンパイラをサポートしています。これは大きな利点です。

なお、std::auto_ptrは、両方のかなり多くの有用な、代わりstd::shared_ptr及びstd::unique_ptrにもたらすC++ 11で推奨されていません。

+3

より具体的には:Boostは、著者がデザイン空間を探索し、実際のユーザーと一緒にライブラリを検証するためのライブラリの遊び場です。C++委員会(そのような著者の多くを特集しています)が来て、働いているものを標準化します。 –

4

まあ、std::shared_ptrboost:shared_ptrは両方とも参照カウントポインタです。代わりにstd :: auto_ptrは非常に異なった働きをします。 std::shared_ptrboost: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 to std::unique_ptrも参照してください。

参考文献:

関連する問題