Maison > développement back-end > C++ > Instanciation d'objet « nouveau » et non « nouveau » : quelles sont les principales différences fonctionnelles ?

Instanciation d'objet « nouveau » et non « nouveau » : quelles sont les principales différences fonctionnelles ?

Mary-Kate Olsen
Libérer: 2024-12-06 22:41:12
original
752 Les gens l'ont consulté

`new` vs. Non-`new` Object Instantiation: What are the Key Functional Differences?

Instanciation d'objets : 'nouveaux' ou non-'nouveaux

Mis à part l'allocation de mémoire, quelles différences fonctionnelles existent entre les lignes suivantes de code ?

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

Time* t = new Time(12, 0, 0);//t is a pointer to a dynamically allocated Time object
Copier après la connexion

Non-'nouveau' Instanciation

La première ligne, Time t (12, 0, 0);, crée une variable t de type Time dans une portée locale. Cette variable est généralement allouée sur la pile et sera détruite à la fin de sa portée.

'new' Instantiation

En revanche, la deuxième ligne, Time* t = new Time(12, 0, 0);, alloue un bloc de mémoire sur le tas (généralement) via les fonctions ::operator new() ou Time::operator new(). Ce bloc de mémoire est ensuite initialisé à l'aide du constructeur Time::Time(), avec l'adresse de la mémoire nouvellement allouée définie comme pointeur this. Le pointeur vers la mémoire allouée est stocké dans la variable t.

Autres différences

Bien que la principale différence réside dans l'allocation de mémoire, il existe quelques autres distinctions subtiles :

  • Durée de vie : les objets non « nouveaux » ont une durée de stockage automatique, ce qui signifie qu'ils sont automatiquement détruits à la fin de leur portée. Les « nouveaux » objets, en revanche, ont une durée de stockage dynamique et doivent être explicitement supprimés pour récupérer leur mémoire.
  • Portée : les objets non « nouveaux » sont définis et existent dans leur portée locale. Les « nouveaux » objets sont alloués en dehors de la pile du programme et ne sont limités à aucune portée spécifique.
  • Propriété : la mémoire des « nouveaux » objets doit être gérée explicitement et les pointeurs associés doivent être déréférencés en toute sécurité. Les objets non « nouveaux » sont automatiquement gérés par le compilateur, il n'est donc pas nécessaire de nettoyer explicitement la mémoire.

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