In C++, the T q = dynamic_cast
construction performs a runtime cast of a pointer p
to some other pointer type T
that must
struct Base {
virtual ~Base ();
};
struct D : Base {};
Base *create () {
D *p = new D;
return p;
}
void *destroy1 (Base *b) {
void *p = dynamic_cast (b);
b->~Base ();
return p;
}
void destroy2 (void *p) {
operator delete (p);
}
int i = (destroy2 (destroy1 (create ())), i);
Warning: This will not work if D
is defined as:
struct D : Base { void* operator new (size_t); void operator delete (void*); };
and there is no way to make it work.