a の制御ブロックはshared_ptr、少なくとも 1 つ存在する間は維持されますweak_ptr。共有ポインタが作成された場合、make_sharedそれはオブジェクトのメモリ全体が割り当てられたままであることを意味します。(オブジェクト自体は適切に破棄されますが、オブジェクトの制御ブロックとメモリが 1 つのチャンクに割り当てられているためmake_shared、それらは一緒にしか割り当て解除できません。)
私の理解は正しいですか?
この動作は、有名な「キャッシュの例」などの問題を表しているようです。オブジェクトのメモリは永久に割り当てられたままになります。
実際の状況で問題になりますか?shared_ptrこのような状況 (大きなオブジェクトと s を使用する意図) でコンストラクターを使用して作成する必要がありますかweak_ptr?