I have an Animal class with constructor and destructor. Cat have a private Brain* attribute. Upon construction, Cat creates his Brain using new Brain(); Upon destruction, Cat deletes his Brain. I don't understand why The cat's and brain's destructors not called, when my Base class destructor is virtual?
#include <iostream>
using std::cout ;
using std::endl ;
class Brain {
public:
Brain (void){cout << "Brain constructor" << endl ;}
~Brain (void){cout << "Brain destructor" << endl ;}
} ;
class Animal
{
public:
Animal (void){cout << "Animal constructor" << endl ;}
virtual ~Animal (void){cout << "Animal destructor" << endl ;}
} ;
class Cat : public Animal
{
public:
Cat (void){
cout << "Cat constructor" << endl ;
myPointer = new Brain() ;
}
~Cat (void){
cout << "Cat destructor" << endl ;
delete myPointer ;
}
private:
Brain* myPointer ;
} ;
int main()
{
const Animal* j = new Cat[1] ;
delete [] j ;
}
Gives output
Animal constructor
Cat constructor
Brain constructor
Animal destructor
Aucun commentaire:
Enregistrer un commentaire