I have the following code:
class A
{
};
class B : public A
{
public:
virtual void f() {}
};
int main()
{
A* a = new A();
B* b = static_cast<B*>(a);
b->f();
}
This program fails with a segmentation fault. There are two solutions to make this program work:
- declare f non-virtual
- do not call b->f() (i.e. it fails not because of the cast)
However, both are not an option. I assume that this does not work because of a lookup in the vtable.
(In the real program, A does also have virtual functions. Also, the virtual function is not called in the constructor.)
Is there a way to make this program work?