"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Instanciation d'objets C++ : pile ou tas : « nouveau » ou pas « nouveau » ?

Instanciation d'objets C++ : pile ou tas : « nouveau » ou pas « nouveau » ?

Publié le 2024-12-21
Parcourir:979

C   Object Instantiation:  Stack vs. Heap: `new` or Not `new`?

Instanciation d'objets : avec ou sans nouveau

Lors de la création d'objets en C, les programmeurs peuvent utiliser l'opérateur "nouveau" ou les instancier directement sans cela. Bien que les deux approches créent des objets, elles diffèrent sur plusieurs aspects clés.

Sans nouveau

L'instanciation d'un objet sans « nouveau » lui réserve directement de la mémoire dans la portée actuelle. Cela se fait généralement sur la pile et aboutit à un objet avec une durée de vie automatique. L'objet est créé et détruit automatiquement dans la portée pour laquelle il a été défini.

Par exemple :

Time t(12, 0, 0); // t is a Time object

Dans le code ci-dessus, l'objet "Time" "t" est créé sur la pile et sa durée de vie est liée à la portée actuelle.

Avec New

L'utilisation de "new" pour instancier un objet lui alloue de la mémoire de manière dynamique sur le tas. Cela permet à l'objet d'être créé et détruit explicitement à la fin de sa durée de vie. Le pointeur "t" stocke l'adresse du tas de l'objet.

Par exemple :

Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object

Ici, le pointeur "t" se voit attribuer l'adresse de tas de l'objet "Time" nouvellement créé. La durée de vie de l'objet est indépendante de la portée et persiste jusqu'à ce que l'opérateur « supprimer » soit utilisé pour libérer sa mémoire.

Différences clés

  • Allocation de mémoire : Les objets créés sans "nouveau" allouent de la mémoire sur la pile, tandis que "nouveau" alloue de la mémoire sur la pile. tas.
  • Durée de vie : Les objets instanciés sans « nouveau » ont une durée de vie automatique, tandis que les objets créés avec « nouveau » ont une durée de vie dynamique et doivent être supprimés manuellement.

Il est important de noter que ces différences sont spécifiques à l'implémentation, car la norme C ne définit pas explicitement le comportement de la pile et du tas. Cependant, dans la plupart des implémentations pratiques, la mémoire de pile est utilisée pour les objets automatiques et la mémoire de tas est utilisée pour les objets dynamiques.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3