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
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.
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