Just a reminder, when you call destructor of derived class. The vtable pointer and RTTI is no longer exist.
As a result, you will get NULL at second dynamic_cast.
#include <iostream> #include <cstdio> #include <cstdlib> class Base { public: Base():a(1){}; ~Base(){}; virtual void foo() {}; int a; }; class Derived : public Base { public: Derived(){}; ~Derived(){}; virtual void foo() {}; }; int main() { void *p = malloc(sizeof(Derived)); Base *base = new (p) Derived(); Derived *d = dynamic_cast(base); if(d) std::cout << "cast ok!\n"; d->~Derived(); Derived *dd = dynamic_cast(base); if(dd) std::cout << "cast ok!\n"; else std::cout << "cast fail!\n"; return 0; }
沒有留言:
張貼留言