Why would you make a destructor virtual?
Answer Posted / chandra sekhar
what chandra said is correct.but it is not 100% correct.for
that answer i want to add one point.
whenever
1)there is a pointer in the base class and we allocated
with the help of new in base class and anthoer pointer in
derived class and agin we allocated with the help of new.
2)whenever the base class object pointer points to
derived class object,and is being created using new.
i.e class base - base class
in main - base bptr;
class derived - derived class
in main - bptr = new derived();
this will be illustrated with an example given below
#include <iostream.h>
class Base
{ protected:
int *ptr;
public:
Base()
{ ptr = new int[10];
cout<<"Constructor: Base"<<endl;
}
virtual ~Base()
{
cout<<"Destructor : Base"<<endl;
delete []ptr;
}
};
class Derived: public Base
{
protected:
int *ptr1;
public:
Derived()
{
ptr1=new int[10];
cout<<"Constructor: Derived"<<endl;
}
~Derived()
{
delete []ptr1;
cout<<"Destructor : Derived"<<endl;
}
};
void main()
{
Base *Var = new Derived;
delete Var;
}
if we are not placing virtual in base class, only base
class destructor will be called because "var is of type
Base".so,
if we are not placing virtual compiler will see only "type
of the pointer,not the object which it is holding".so,if we
place virtual it will see the object it is holding.
now memory allocated for ptr,ptr1 in heap was destroyed by
destructors of the respective class.
| Is This Answer Correct ? | 4 Yes | 0 No |
Post New Answer View All Answers
Will rust take over c++?
What is string in c++ programming?
Why c++ is called oop?
What is the best book for c++ beginners?
What is c++ try block?
Which of the following is not a valid declaration for main() a) int main() b) int main(int argc, char *argv[]) c) They both work
What is data binding in c++?
Inline parameters : What does the compiler do with the parameters of inline function, that can be evaluated in runtime ?
what is upcasting in C++?
What will the line of code below print out and why?
What does std mean in c++?
How do you remove an element from a set in c++?
What is the full name of logo?
What is the full form of india?
Difference between strdup and strcpy?