dynamic_cast + virtual methods
От: pasenger  
Дата: 04.02.04 14:04
Оценка:
почему при вызове виртуального метода базового класса после dynamic_cast вызывается exception?

#include "stdio.h"

class A
{
public:
    void doIt() { printf("A::doIt()\n"); }
    virtual doItVirtual() { printf("A::doItVirtual()\n"); }
    virtual ~A() {};
};

class B : public A
{
public:
    void doIt() { printf("B::doIt()\n"); }
    virtual ~B() {};
};

void main()
{
    B *pB, *pB1;
    pB = new B();
    pB->doIt();         // B::doIt()
    pB->doItVirtual();  // A::doItVirtual()
    delete(pB);

    A a;
    pB1 = dynamic_cast<B*>(&a);
    pB1->doIt();        // B::doIt()
    pB1->doItVirtual(); // VC7(System.NullReferenceException) VC6(Access Violation)
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.