+ 1

Regarding Virtual Destructor

I have two classes Parent and child. Child is derived from Parent class. Parent class is having Show method as virtual. But it do not contain any virtual destructor. Parent *p; Child c; p = &c; p->show(); delete p; When i run the above code it calls both classes destructor. But as i read somewhere in case of upcasting if base class destructor is not virtual then compiler will not call derived class destructor. And 2nd Scenario with Same above classes, when i write below piece of code inside main, Parent *p = new Derived; p->show(); delete p; Then its just called base class destructor and not derived. Can someone tell me the difference? Why in first scenario it has called base plus derived both?

17th Nov 2019, 7:04 AM
Amit chavare
Amit chavare - avatar
4 Answers
+ 2
In first case how can u apply delete operator to pointer p which points to statically allowed object c.... That's not correct... And the deatructor is getting called for c because it's a object whose scope will end when main() ends
17th Nov 2019, 7:19 AM
Saurabh B
Saurabh B - avatar
+ 2
In second case it's the actual deletion taking place through delete operator which is applied to base pointer... Hence no derived class destructor call...
17th Nov 2019, 7:22 AM
Saurabh B
Saurabh B - avatar
+ 2
In simple terms u should delete only stuff u allocate through new or get unexpected results
17th Nov 2019, 7:23 AM
Saurabh B
Saurabh B - avatar
+ 1
Thanks Saurabh B
17th Nov 2019, 7:31 AM
Amit chavare
Amit chavare - avatar