у меня есть следующие иерархии классов:C++ Виртуальный деструктор Краш
class Base
{
public:
virtual ~Base();
};
class Derived : public Base
{
public:
virtual ~Derived();
};
class MoreDerived : public Derived
{
public:
virtual ~MoreDerived();
};
вместе с объектами
Base* base = new Base();
MoreDerived* obj = new MoreDerived(*base);
Существует часть кода, где нужно удалить объект MoreDerived используя нить, таким образом, чтобы сначала выбросить его в void *. В потоке, у меня есть
void KillObject(void* ptr)
{
delete static_cast<Base*>(ptr);
}
Non из указателей являются NULL, и void* ptr
IS MoreDerived * (или, по крайней мере, Base *), но приложение по-прежнему падает ...
Ваш пример кода кажется неполным - «static_cast (PTR)» не является законным, оно нуждается в тип, указанный (что-то вроде static_cast (PTR)), и вы, вероятно, следует использовать reinterpret_cast так или иначе. Вы также используете конструктор для MoreDerived, который вы нигде не объявляете/не определяете. Не могли бы вы отредактировать свой пост, чтобы код лучше отражал ваш реальный код? –
Почему вы думаете, что вам нужно отбросить его на 'void *'? –
платформа? компилятор? – pm100