Question #941   Proposée par Answiki le 25/09/2020 à 15:15:57 UTC

En C++, quelle est la différence entre une instanciation sur la pile et sur le tas ?

Answer   Submitted by Answiki on 09/25/2020 at 03:18:34 PM UTC

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;
} 


6 events in history
Answer by Answiki on 09/25/2020 at 03:18:34 PM

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;
} 


Question by Answiki 09/25/2020 at 03:15:57 PM
En C++, quelle est la différence entre une instanciation sur la pile et sur le tas ?
Question by Answiki 09/25/2020 at 03:15:46 PM
En C++, quelle est la différence entre une instanciation sur la pile et une instanciation sur le tas ?
Answer by Answiki on 09/25/2020 at 03:15:10 PM

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 faut libérer manuellement la mémoire, par exemple 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;
} 


Answer by Answiki on 09/25/2020 at 03:13:22 PM

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 pour un objet stocké sur le tas. Lors d'une instanciation dynamique, il faut libérer manuellement la mémoire, par exemple 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;
} 


Question by Answiki 09/25/2020 at 02:26:04 PM
Comment instancier une classe en C++ ?
# ID Query URL Count

Icons proudly provided by Friconix.