Для данного класса и подкласса:
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-информация для указателя теряться при возвратеиз функции?