Maison >développement back-end >C++ >Instanciation d'objet C : pile ou tas : « nouveau » ou pas « nouveau » ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-12-02 01:19:13291parcourir

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 soit l'opérateur "nouveau" soit les instancier directement sans cela. Bien que les deux approches créent des objets, elles diffèrent sur plusieurs aspects clés.

Sans nouveau

Instancier 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 le périmètre pour lequel 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

Utiliser "new" pour instancier un L'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 de 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 du "Time" nouvellement créé objet. 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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn