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
Libérer: 2024-12-02 01:19:13
original
357 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal