A
amit_edge
Can anyone tell me the reason for this behaviour of virtual
destructors?
#include<stdio.h>
class a
{
public:
int i;
a() { i=10; }
virtual ~a() { printf("\nDestroying A"); }
};
class b: public a
{
public:
~b(){ printf("\nDestroying B"); }
};
void main()
{
b *b1=new b;
a *a1=b1;
a1->~a(); //calls Destructor B and A
printf("%d\n",a1->i); // prints 10
delete b1; //calls Destructor A only!!!!
printf("%d\n",a1->i); // prints junk
}
destructors?
#include<stdio.h>
class a
{
public:
int i;
a() { i=10; }
virtual ~a() { printf("\nDestroying A"); }
};
class b: public a
{
public:
~b(){ printf("\nDestroying B"); }
};
void main()
{
b *b1=new b;
a *a1=b1;
a1->~a(); //calls Destructor B and A
printf("%d\n",a1->i); // prints 10
delete b1; //calls Destructor A only!!!!
printf("%d\n",a1->i); // prints junk
}