未処理の例外をスローしている Win32 コンソール アプリケーションをリバース エンジニアリングして修正しようとしています。
スレッドで実行されているクラスのインスタンスが 32 個あります。これらの「サービス」スレッドはそれぞれ CMessage の一意のインスタンスを定期的に作成/削除する必要があり、これらの CMessage オブジェクトはそれぞれ Service クラスでプライベートに宣言されます。
デバッガーでアプリケーションを実行すると (Visual Studio 2005 を使用しています)、CMessage のウォッチ ウィンドウは、CMessage メンバー関数が呼び出される直前に、CMessage のアドレスが 0x00000000 に変更されることを示します - 例外の原因です。
なぜこれが起こるのかについて私が見ることができる簡単な説明はありません。前のコード行とこの行の間で不都合なことは何も起こっていないように見えるので、私の疑いでは、何らかの理由で各スレッドが他のスレッドの 1 つから CMessage オブジェクトを誤って参照している可能性があります (スレッドの有効期間中のある時点で CMessage がそのスレッドのオブジェクトは削除されます)。
私の質問は次のとおりです。これらの CMessage オブジェクトが完全にスレッドセーフであり、現在のクラス スコープを除いて、どこからでも変更/削除できないことを確認する最善の方法は何ですか? これがプライベートの目的だと思っていましたが、今は完全にはわかりません。私がやろうと思ったことの 1 つは、次のように CMessage オブジェクトを参照することでした。
this->myCMessage;
ただとは対照的に:
myCMessage;
これで違いはありますか?