0

私はc ++の初心者です。私のコードで std::unique_ptr と std::shared_ptr の使用法に出くわしました

typedef std::unique_ptr<type1> type1Handler;
typedef std::shared_ptr<type2> type2Handler;

2 つの質問があります。

  1. unique_ptrとを使用する利点は何ですかshared_ptr
  2. それらの間の主な違いは何ですか?

おそらく、例は非常に役立つでしょう!

4

2 に答える 2

7

これらは、2 つの完全に異なるユース ケース用です。

  1. std::unique_ptrオブジェクトの唯一の所有権を保持し、unique_ptr が範囲外になるとそのオブジェクトを破棄します。2 つunique_ptrの のインスタンスが同じオブジェクトを管理することはできません。( http://en.cppreference.com/w/cpp/memory/unique_ptr )

  2. std::shared_ptrオブジェクトの共有所有権を保持します。複数のshared_ptrオブジェクトが同じオブジェクトを所有している場合があります。shared_ptrオブジェクトを所有する最後の残りのオブジェクトが破棄されるか、オブジェクトを所有する最後の残りのオブジェクトがまたはshared_ptrを介し​​て別のポインタに割り当てられると、オブジェクトは破棄され、そのメモリの割り当てが解除されます。( http://en.cppreference.com/w/cpp/memory/shared_ptr )operator=reset()

唯一の所有権を強制することは、std::unique_ptr譲渡もコピーもできません。これは、移動セマンティクスを使用する必要があることを意味します。

unique_ptrコードのどこかにが表示されている場合、これは、ほら、ここにポインターがあり、私たちが所有していることを意味します。. shared_ptrこれは、所有権がコード全体に分散されている可能性があるについては言えません。

于 2013-08-21T14:42:07.450 に答える