Потеря информации RTTI после возврата из функции - PullRequest
4 голосов
/ 30 августа 2011

Для данного класса и подкласса:

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

1 Ответ

5 голосов
/ 30 августа 2011

Был деструктор, случайно нанесший вред указателю. После устранения этой ошибки RTTI работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...