Я наткнулся на это:
struct Base {
void* operator new (size_t);
void operator delete (void*);
virtual ~Base () {} // <--- polymorphic
};
struct Derived : Base {};
void Base::operator delete (void *p)
{
Base *pB = static_cast (p);
if(dynamic_cast(pB) != 0)
{ /* ... NOT reaching here ? ... */ }
free(p);
}
Теперь, если мы это сделаем,
Base *p = new Derived;
delete p;
Удивительно, но условие внутри Base :: delete не выполняется
Я что-то не так делаю? Или при приведении из void *
теряется информация о Derived *
?