1

タイトルがわかりにくいので、他にいい案があれば教えてください。今ビジネスに: クラスのメソッドをアクティブにしています。

m_someObject.Clear();

問題はm_someObject、呼び出しの前にのアドレスを見ると、それが特定のアドレスにあることがClearわかり、デバッガーでメソッドに入ると、this変数が別のアドレスにあることがわかります。その結果、メソッドから戻った後、それを呼び出したインスタンスにClear影響を与えていないようです。
m_someObject何がこの種の動作を引き起こす可能性があるのか​​ 誰にも分かりませんか? Microsoft Visual Studio 2010 64 ビットで作業しています。

4

4 に答える 4

0

同じ名前の2つの異なる変数があるかどうかを確認できますか?1つはイミディエートスコープで定義され、もう1つはグローバルスコープで定義されていますか?

于 2012-06-06T09:48:04.953 に答える
0

まあ、どうやらデバッガが嘘をついているようです。私はこれに気づいていませんでしたが、どうやらコードのいくつかはリリースモードでコンパイルされました。結論-デバッガーいいえ、printf-はい。

于 2012-06-07T08:56:27.433 に答える
0

おそらくm_someObject、他の関数に値として渡し(したがってコピーを取得し)、コピーClear()時にのみ実行します。この方法では、元のオブジェクトの変更に気付かないでしょう。

于 2012-06-06T09:10:05.517 に答える
0

最も一般的な理由は多重継承です。C# や Java とは異なり、C++ では、1 つのクラスが複数の基本クラスを持つことができます。明らかに、すべてをオフセット 0 に配置できるわけではありません。これは、thisゼロ以外のオフセットに配置された基本クラスのメソッドを使用している場合は、調整する必要があることを意味します。

于 2012-06-07T09:28:13.787 に答える