3

CRuntimeClassビューを設定するためにポインターのリストを受け取る関数があります。すでにセットアップされている同じクラスのリストで関数が呼び出された場合、何もせずに戻りたいと思います。ポインター値を保存して次の呼び出しでそれらを比較することは現在機能していますが、それが合法的なことであり、たまたま機能することではないことを確認したいと思います。私の doc-search-fu が欠けているのかもしれませんが、特定のクラスの RUNTIME_CLASS() マクロから返されるポインター値がプログラムの存続期間中同じであることを保証する場所が見つかりません。私が見つけることができる最も近いものは、次のドキュメントにCObject::GetRuntimeClass()あります。

CObject 派生クラスごとに 1 つの CRuntimeClass 構造体があります。

これは、ポインターの値が変更されるべきではないことを意味しますが、正確に述べているわけではありません。誰かがそれについてもう少し具体的なことを持っていますか? または、CRuntimeClasses を比較するより良い方法はありますか?

4

2 に答える 2

2

No such guarantee is documented, albeit that it is likely. You are supposed to use CObject::IsKindOf().

于 2010-06-15T13:06:38.140 に答える
1

静的メンバーへのポインターを返すafx.hデバッグを少し見てみると、次のようになります (マクロの定義で確認できます)。RUNTIME_CLASS()static CRuntimeClass class##class_nameDECLARE_DYNAMIC(class_name)

メンバーは静的であるため、そのポインターは実行時に変更されません。つまりstatic、あなたの保証です。

于 2010-06-15T13:28:09.790 に答える