ATL/WTL Part6
■ このスレッドは過去ログ倉庫に格納されています
0585デフォルトの名無しさん
2010/03/06(土) 21:44:37ATLインターナルによると、解放処理内でスマートポインタが再度参照されて
二重解放されてしまう事態を防ぐためらしい。
>579 のコードだと次のケースで問題が生ずる。以下引用
たとえば、スマートポインタがクラスAのメンバ変数で、オブジェクトBの参照を
保持しているとしよう。そして、スマートポインタの.Release メソッドを呼び出す。ス
マートポインタは、オブジェクトBへの参照を解放する。今度は、オブジェクトBが、ス
マートポインタを含んだクラスAのインスタンスを参照する。オブジェクトBは、クラ
スAのインスタンスへの参照を解放することにする。クラスAのインスタンスはデスト
ラクションを決意し、スマートポインタのメンバ変数のデストラクタを呼び出す。デスト
ラクタはインターフェイスポインタがNULLでないことを検出し、インターフェイスを
もう一度解放する。
- ATLインターナル(p.86)
■ このスレッドは過去ログ倉庫に格納されています