Case-1:
Base class has a dynamically allocated variable but the derived class doesn't and then I do:
Base* p = new Derived;
delete p;
Case-2:
Both base and derived class have dynamically allocated variables (derived has additional dynamically allocated variables besides those inherited). Again, I do:
Base* p = new Derived;
delete p;
Case-3: Base class has no dynamically allocated variables but the derived one does. I do this again:
Base* p = new Derived;
delete p;
Case-4: Neither base nor derived class has any dynamically allocated variable. Again I do:
Base* p = new Derived;
delete p;
Or does it cause undefined behaviour in all cases if the virtual keyword is ignored?