Since base class destructor is not declared virtual...that is why destructors of derived are not getting called...but why does the code crash....when i don't add virtual keyword to derive class destructors then my code does not crashCode:#include <stdio.h> class Person { public: ~Person(){} }; class Englishman :public Person { public: virtual ~Englishman() { printf( "Goodbye\n" ); } }; class Japanese : public Person { public: virtual ~Japanese() { printf( "Sayonara\n" ); } }; class German :public Person { public: virtual ~German() { printf( "Auf Wiedersehen\n" ); } }; int main() { Person *p = new Japanese; delete p; p = new German; delete p; return 0; }