07/01/07 20:46:53
>>563
shared_ptr の実装は,参照カウントによって管理されるオブジェクト
(A とします) と独立して,新たにフリーストア (ヒープ) 上に
参照カウント用のオブジェクト (X とします) を生成します.
X は, A の参照カウントと独立して自分自身の参照カウントも持っていて,
独立した2つの参照カウントを持っているイメージになります.
shared_ptr が1つ作られるごとに A の参照カウントと X の参照カウント両方が
1つ増やされ, shared_ptr が1つ破壊されるごとに
A の参照カウントと X の参照カウント両方が1つ減らされます.
weak_ptr が1つ作られるごとに X の参照カウントのみが増やされ,
weak_ptr が1つ破壊されるごとに X の参照カウントのみが減らされます.
A の参照カウントが0になれば A を delete します.
しかし, X の参照カウントが0になっていなければ X は破壊されません.
最終的に全ての shared_ptr と weak_ptr が存在しなくなった時点で,
X の参照カウントは0になります.この時点で X は delete されます (自殺します).
以上が, shared_ptr と weak_ptr の実装面での動作です.