bonjour:
j'ai eu ce matin une question d'entretien. On a demandé ce qu'affichait ce programme.

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;
}
bon, jusqu'à delete homme, je sais ce qu'il se passe.
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