Исключения RTTI, сбои или ошибки вокруг dynamic_cast могут означать, что вы выполнили недопустимое приведение. dynamic_cast<derived*>(ptrToBase)
допустимо, если и только если класс derived
и класс base
оба соответствуют следующему ограничению: этот класс или один из его базовых классов имеет функцию виртуального члена.
Эта виртуальная функция-член может быть чем угодно, включая деструктор. Если у вас нет других функций-членов, вы можете попробовать:
struct base
{
virtual ~base(){}
...
}
struct derived : public base
{
...
}
Теперь base
имеет функцию виртуального члена, как и производную. Попробуйте это и посмотрите, решит ли это вашу проблему.
EDIT-ADD:
@ carleeto - в "у него уже был виртуальный деструктор", да == base?
Если производный имеет виртуальный деструктор, но база не является виртуальным dtor, вы все равно можете получить эту ошибку.
Кроме того, вы должны убедиться, что объект не был разрушен - после запуска деструктора dynamic_cast больше не является безопасным для вызова. Попробуйте добавить след в ctors и dtors.