👋 Bonjour ! Je suis Alphonsio le robot. Posez moi une question, je vais tenter d'y répondre.
En C++, quelle est la différence entre une instanciation sur la pile et sur le tas ?

Il existe deux façons d'instancier une classe en C++ :


  • Une instance sur la pile est une variable locale. La mémoire est gérée automatiquement et sera libérée à la fin de sa portée.

// Instanciation sur la pile
maClasse objet;


  • Une instance sur le tas ou instanciation dynamique crée un pointeur stocké sur la pile et une instance de l'objet stockée sur le tas. Lors d'une instanciation dynamique, il ne faut pas oublier de libérer manuellement la mémoire, typiquement avec delete objet;.

// Instanciation dynamique (sur le tas)
maClasse *objet = new maClasse(); 



Sur l'exemple suivant, objet1 est instancié sur la pile. Cette instance est locale à la fonction. La mémoire qu'il occupe sera libérée automatiquement à la fin de la fonction :

void onTheStack() {
	// Instance locale à la fonction
	maCLasse objet1;
	// ...	

} 	// L'instance est détruite à la fin de la fonction


Sur cet exemple, objet2 est instancié dynamiquement. L'instance de cet objet peut être utilisée en dehors de la fonction (à condition de récupérer son pointeur) :

maCLasse* onTheHeap() {
	// Pointeur sur une instance créée dynamiquement
	maClasse *objet2 = new maClasse(); 
	// ...
	// Retourne le pointeur pour une utilisation externe à la fonction
	return object2;
} 


More