私はc ++の初心者です。私のコードで std::unique_ptr と std::shared_ptr の使用法に出くわしました
typedef std::unique_ptr<type1> type1Handler;
typedef std::shared_ptr<type2> type2Handler;
2 つの質問があります。
unique_ptr
とを使用する利点は何ですかshared_ptr
- それらの間の主な違いは何ですか?
おそらく、例は非常に役立つでしょう!
これらは、2 つの完全に異なるユース ケース用です。
std::unique_ptr
オブジェクトの唯一の所有権を保持し、unique_ptr が範囲外になるとそのオブジェクトを破棄します。2 つunique_ptr
の のインスタンスが同じオブジェクトを管理することはできません。( http://en.cppreference.com/w/cpp/memory/unique_ptr )
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
これは、所有権がコード全体に分散されている可能性があるについては言えません。
std::unique_ptr
:
std::shared_ptr
: