TITLE: Possible to call undefined pure virtual functions [ Example adapted from "C++ Gotchas", tutorial by Tom Cargill, p. 24 ] Given the following program: #include class Base { public: Base () { g(); } void g() { f(); } virtual void f () = 0; }; class D : public Base { public: virtual void f() { printf ("D::f\n"); } }; int main () { D d; return 0; } could possibly result in a crash. The reason is that at the time Base is being constructed, D does not yet exist. This is the reason that calling virtual functions from constructors will not call overridden versions of virtual methods for derived classes. Note that if f() was called directly from the Base constructor, the compiler would have caught the error.