1

クラス SharedObject 内にプライベート ref カウントがあります。SharedObject は、Window などの他のクラスの基本クラスです。Window は Editor の基本クラスです。

SharedObject::Release() の呼び出しにより、ref カウントが 0 になると、SharedObject はそれ自体を削除します。最初に Editor デストラクタに到達します。これは、this ポインタに m_refs == 0 が含まれていることを示していますが、Window デストラクタに到達すると突然 1 になり、SharedObject デストラクタに到達してもまだ 1 です。

SharedObject::IncRef() メソッドにブレークポイントを設定しましたが、これが発生している間は呼び出されませんでした。

何?

4

2 に答える 2

2

最適化をオフにしてビルドし、m_refs にメモリ ブレークポイントを設定します。

于 2011-02-05T22:43:35.387 に答える
0

おそらく、この破壊が発生するずっと前に、どこかでメモリリークが発生しているようです。Alleyoop を使用してリークを見つけます。役に立ちます。邪魔にならないようにしておいて損はありません。

複数のスレッドを使用していますか? おそらく、破壊中に他のスレッドによってどこかの生のポインターが取得されたことが原因です。

余談ですが、boost::intrusive_ptr を使用することをお勧めします。これは、共有オブジェクトで addref と release を処理するための非常に便利なパターンであり、結果として役立ちますが、コードに実際の混乱がない限り、これはおそらく問題を解決しません。 ;)

于 2011-02-05T23:00:57.303 に答える