Maison >développement back-end >C++ >Instanciation d'objet C : pile ou tas : « nouveau » ou pas « nouveau » ?
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
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!