class Base
{
public:
int i;
Base()
{
cout<<"Base Constructor"<<endl;
}
Base (Base& b)
{
cout<<"Base Copy Constructor"<<endl;
i = b.i;
}
~Base()
{
cout<<"Base Destructor"<<endl;
}
void val()
{
cout<<"i: "<< i<<endl;
}
};
class Derived: public Base
{
public:
int i;
Derived()
{
Base::i = 5;
cout<<"Derived Constructor"<<endl;
}
/*Derived (Derived& d)
{
cout<<"Derived copy Constructor"<<endl;
i = d.i;
}*/
~Derived()
{
cout<<"Derived Destructor"<<endl;
}
void val()
{
cout<<"i: "<< i<<endl;
Base::val();
}
};
Se lo faccio Derivato d1; Derivato d2 = d1; Viene chiamato il costruttore di copie di base e viene chiamato il costruttore di copie predefinito di derivato.Base Copy constructor non chiamato
Ma se rimuovo i commenti dal costruttore di copia di derivato, il costruttore di base copia non viene chiamato. C'è qualche ragione specifica per questo? Grazie in anticipo.
IMVHO http://www.parashift.com/c++-faq-lite/ctors.html è una risorsa eccezionale per comprendere i costruttori di C++. (E in effetti, il C++ FAQ Lite in generale è un'incredibile fonte di informazioni per i principianti avanzati.) – notJim
Penso che il tuo distruttore di base debba essere virtuale. –