bonjour:
j'ai eu ce matin une question d'entretien. On a demandé ce qu'affichait ce programme.
bon, jusqu'à delete homme, je sais ce qu'il se passe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 void f(); void g(); class Homme{ public: virtual void f1(){ f(); } ~Homme(){ cout<<"~Personn::Trace"<<endl; } }; class Docteur: public Homme{ public: virtual void f2(){g();} ~Docteur(){cout<<"~Docteur::Trace"<<endl;} }; void f(){ cout<<"f::trace"; } void g(){ cout<<"g::trace"; } int main(){ Docteur docteur; docteur.f1(); docteur.f2(); Homme* homme=new Docteur; delete homme; }
Quand on détruit le pointeur homme, on appelle le destructeur ~Homme, car on détruit un pointeur de type Homme. Mais en détruisant homme, ne détruisons nous pas la place mémoire allouée par new?
quand on quitte le prog, on affiche:
~Docteur::Trace
~Personn::Trace
mais je ne comprends pas pourquoi.
A l'inverse si delete ne détruit que le pointeur, et non la place mémoire, je comprends parfaitement: les destructeurs sont appelés dans le sens inverse.
Mais la question reste: delete ne détruit il pas la place mémoire, donc l'objet Docteur alloué par new.
merci
Partager