Я получаю это странное исключение во время выполнения с dynamic_cast, но только если я заполняю объект, который я кастую, нулями, используя memset
, или просто копирую в него некоторые данные с помощью memcpy
. Вот пример, который генерирует исключение.
class Base
{
public:
virtual void func() { }
};
class Derived : public Base
{
public:
void func() override { }
};
int main()
{
Derived derived;
Base* base_ptr = &derived;
memset(base_ptr, 0, sizeof(Derived));
Derived* derived_ptr = dynamic_cast<Derived*>(base_ptr);
}
И сообщение об исключении:
Я получаю такое же исключение, если копирую одно Derived
возражать другому, используя memcpy. Кто-нибудь знает, что происходит, это портит RTTI, который использует dynamic_cast
?
Я делаю игровой движок, и в нем есть система компонентов сущностей, и в какой-то момент программы я загружаю все объекты и их компоненты из файла. Я реализовал различные компоненты с помощью наследования (каждый компонент является производным от одного базового компонента). Когда я загружаю объекты и их компоненты, я не могу просто выделить объем памяти, который занимает компонент, я должен использовать новое имя компонента , потому что только тогда работает dynamic_cast.
Я с использованием Visual Studio 2019.