C++ question: dynamic_cast
C++ question: dynamic_cast
- Subject: C++ question: dynamic_cast
- From: Dmitry Markman <email@hidden>
- Date: Sun, 13 Jul 2008 19:37:49 -0400
Hi, all
I accidentally encountered the following code (not exactly of course that is very simplified version)
class V { virtual int getID() = 0; };
class A : public V { public: virtual int getID(){return 0;} virtual int getIDA(){return 10;} };
class B : public V { public: virtual int getID(){return 1;} virtual int getIDB(){return 11;} };
A *a = new A(); B *b = new B();
void *getA() { return a; }
void *getB() { return b; }
int main (int argc, char * const argv[]) { A *sa = static_cast<A *>(getB()); A *aa = dynamic_cast<A *>(sa); //here aa ISN'T NULL!!!!!
return 0; }
in that fragment aa isn't null I'd expect NULL, of course NOTE: gdb clearly shows that aa (or sa) is an instance of the B class (with set print object on and set print vtbl on) (gdb) p aa $2 = (B *) 0x106940 (gdb) p *aa $3 = (B) { <V> = { _vptr$V = 0x2078 }, <No data fields>} (gdb)
from other hand the following code behaves just fine
int main (int argc, char * const argv[]) { V *v = static_cast<V *>(getB()); A *aa = dynamic_cast<A *>(v); //here aa IS NULL which is good
return 0; }
thanks in advance for any help with clarification
|
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden