カウンターとオブジェクトは同じ割り当てを共有するため、同じ割り当て解除も共有します。
カウンターは最後まで存続し、消える必要がshared_ptr
ありweak_ptr
ます。永続的な s を持つ大きなオブジェクト (または多くの小さなオブジェクト) がある場合、 を介しweak_ptr
て s を割り当てると、メモリの競合が発生する可能性があります。shared_ptr
make_shared
第 2 に、ポインターまたはリソース ハンドルを渡すサード パーティ API があり、独自の破棄機能を持っている可能性があるmake_shared
場合、すべてのケースで適切でも使用可能でもありません。独自のmake_
関数を作成すると、煩雑な詳細を邪魔にならないようにすることができ、この問題に対処でき、例外的なコーナーケースにも対処できます。
最後に、共有ポインターはすばらしいものですが、あまりにも強力です。unique_ptr
所有権を表すためにやboost::scoped_ptr
、侵入型の参照カウント ポインターなど を必要とすることがよくあります。状況が実際にリソースの共有shared_ptr
所有権を伴う場合にのみ使用する必要があります。「簡単」であるため、無意味に使用すると、スパゲッティコードと同等のリソースになる傾向があります。