Работает ли dynamic_cast внутри перегруженного оператор delete?

Я наткнулся на это:

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 * ?

5
задан casperOne 10 May 2012 в 12:51
поделиться