クラスとサブクラスが与えられた場合:
class Event {...}
class Note : public Event {...}
メモは複製され、関数 f() 内のポインターに格納されます。型情報はポインターに保持され、dynamic_cast によって復元できます。
void f()
{
pEvent = pNote->Clone(); // create a clone of a Note
ASSERT(dynamic_cast<Note*>(pEvent)); // check the pointer, here it works
}
ここで、 f() から戻った後、型情報は失われます:
f();
ASSERT(dynamic_cast<Note*>(pEvent)); // -> "Access violation - no RTTI-data"
VS デバッガーは有効なポインター値 (変更されていない) を表示しますが、スコープ内にいる場合を除き、派生クラスは表示しませんf()
。
関数から戻るときにポインタの RTTI 情報が失われるのはなぜですか?