Comprendre l'instanciation d'objets : avec ou sans « nouveau »
Lors de la création d'objets en programmation, deux approches émergent : utiliser le « nouveau » mot-clé ou instanciation sans lui. Au-delà de l'allocation dynamique de mémoire, une question cruciale se pose : existe-t-il une distinction fonctionnelle entre ces deux méthodes ?
Examinons les extraits de code suivants :
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
Dans la première ligne, le 't ' est créée localement, généralement sur la pile. Il contient une instance de l'objet « Time » qui est détruite une fois sa portée terminée.
À l'opposé, la deuxième ligne utilise l'opérateur « new » pour allouer de la mémoire de manière dynamique et initialise l'objet « Time » dans ce bloc. Par conséquent, la variable « t » stocke l'adresse de la mémoire allouée dynamiquement au lieu de l'objet lui-même. Cette allocation dynamique se produit sur le tas par défaut et nécessite l'utilisation de 'delete' pour libérer ultérieurement la mémoire allouée.
Ainsi, la différence fonctionnelle réside dans la portée et la durée de vie de l'objet créé. Dans le premier cas, l'objet est local et détruit à la fin de sa portée, tandis que dans le second cas, l'objet reste en existence jusqu'à sa suppression explicite.
Il est important de noter que la localisation des variables sur le la pile et les objets dynamiques sur le tas sont une pratique d'implémentation courante. Cependant, la norme C définit ces objets uniquement en fonction de leur durée de vie, et non de leur emplacement physique en 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!