Skip to main content

Pure virtual method called

Posted in

I managed to make a pure virtual method to be called. I'm not kidding, I'm serious and I mean it. I do realize that such behaviour is erroneous in its nature, but nevertheless, lets get an understanding of why this happened and how.

Here's the situation (simplified). I have two classes like these:

class A
    virtual void f() = 0;
class B : public A
    virtual void f() { /*...*/ }

In the constructor of B I call f(). Everything compiles just fine. I run the program and it crashes with "Pure virtual method called".

How can this be? The answer is simple:
1) The pure virtual method (at least in case of GCC) is implemented in a special way, so that it prints "Pure virtual method called" and then crashes.

and the most important

2) the C++ standard states that calling the virtual function in the constructor is an undefined behaviour.

That's why be careful and watch for functions your are calling in a derived class' constructor.

Post new comment

The content of this field is kept private and will not be shown publicly.
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
            Oo      oO  OoooOOoO         OOooOoO 
o O O o o o o
o o O O O O O
O Oo O o oOo oOooO
O .oOo. O o O o O
o O o o O o O o
O o O o O O o o
o' oOoO' O o OOooOooO `oO O'
Enter the code depicted in ASCII art style.