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
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 :
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!