std::make_shared<T>
(明示的に a を割り当てるのではなく)を呼び出すshared_ptr<T>
と、パフォーマンス上の理由から、参照カウントが T のインスタンスと共にメモリに割り当てられることが期待されます。すべて順調です。
しかしweak_ptr
、同じオブジェクトを参照するインスタンスがある場合、オブジェクトがまだ存在するかどうかを知るために、おそらくその参照カウントにアクセスする必要があります。
そのため、T のインスタンスへの最後の shared_ptr が破棄されると、システムを単純に理解すると、T が格納されているメモリの割り当てを解除できないことが暗示されます。
別の弱い参照カウンターがあり、理論的には T のインスタンスとは別に保持できるため、弱い参照がまだ存在している間に T を破棄し、メモリの割り当てを解除できます。しかし、その後、2 つの別々の割り当てに戻り、 の利点が妨げられますmake_shared
。
ここで何かを誤解していると思います。std::make_shared
弱い参照が存在する場合、構築されたインスタンスに割り当てられたメモリを解放するにはどうすればよいですか?