DBResourceMonitor
データベースクラスのセットで使用される単純なクラスを作成しました。データベース クラスの 1 つのインスタンスが作成されると、それ自体が登録され、破棄されると、 のシングルトン インスタンスで登録が解除されますDBResourceMonitor
。アプリケーションが終了すると、そのグローバル インスタンスDBResrouceMonitor
が破棄されます。これにより、監視対象のクラスの登録済みインスタンスが残っていないことが確認され (つまり、登録ごとに unregister が呼び出された)、TRACE 出力が発行されます。不一致があった場合はアサートします。
これらのデータベース オブジェクトのいくつかをグローバル アプリケーション オブジェクトのメンバーとして配置するまでは、これで問題ありません。したがって、グローバル アプリケーション オブジェクトと は両方ともDBResourceMonitor
グローバル シングルトンであり、アプリケーションは最初に構築されるため、最後に破棄されます。したがって、DBResrouceMonitor
が破棄されるとき、アプリ オブジェクトのメンバーはまだ登録解除されていません。そのため、一致しない登録/登録解除呼び出しがあったことを示すエラーがスローされます。
私の知る限り、 がDBResrouceMonitor
アプリケーション オブジェクトの前に構築される (したがって、後で破棄される) ことを保証する方法はありません。
これは正しいです?それを回避する賢い方法、または上記を再考して、最終スレッドが終了する前にすべてが処理されたかどうかを追跡できる方法はありますか?