62

boost::scoped_ptr<T>との間の唯一の違いは、移動セマンティクスstd::unique_ptr<T>を持っているのに対し、単なるget / resetスマートポインターですか?std::unique_ptr<T>boost::scoped_ptr<T>

4

2 に答える 2

51

いいえ、しかしそれが最も重要な違いです。

もう1つの大きな違いは、unique_ptr方法と同様に、デストラクタオブジェクトを使用shared_ptrできることです。とは異なりshared_ptr、デストラクタタイプはunique_ptrのタイプの一部です(アロケータがSTLコンテナタイプの一部である方法)。

Aは、できるconst unique_ptrことのほとんどを効果的に行うことがscoped_ptrできます。実際、とは異なりscoped_ptr、呼び出しconst unique_ptrでリバウンドすることはできません。reset

また、不完全なタイプであるにunique_ptr<T>取り組むことができます。Tデフォルトの削除者タイプでは、削除者を呼び出す可能性Tのあるものに対して何かを行うときに、完全である必要があります。unique_ptrしたがって、状況に応じて、それがどこで発生するかについてゲームをプレイする自由があります。

于 2011-11-20T06:13:18.173 に答える
35

unique_ptrオブジェクトを排他的に所有します。コピーはできませんが、所有権の譲渡をサポートします。これは、現在非推奨になっているの代わりとして導入されましたauto_ptr

scoped_ptrコピーも移動もできません。スコープ外に出たときにポインタが確実に削除されるようにする場合は、この選択をお勧めします。

于 2011-11-20T06:16:14.510 に答える