Quelle est la différence entre "nouvel opérateur" et "opérateur nouveau"?
Merci.
Quelle est la différence entre "nouvel opérateur" et "opérateur nouveau"?
Merci.
J'ai l'habitude de tenter de formuler les choses différemment pour différencier les deux un peu mieux, mais c'est une bonne question, en tout cas.
Nouvel opérateur est une fonction qui alloue de la mémoire brute -- au moins sur le plan conceptuel, il n'est pas très différente de l' malloc()
. Si c'est assez rare, sauf si vous écrivez quelque chose comme votre propre conteneur, vous pouvez appeler l'opérateur de nouvelles directement, comme:
char *x = static_cast<char *>(operator new(100));
Il est également possible de surcharger l'opérateur new, soit à l'échelle mondiale, ou pour une classe spécifique. IIRC, la signature est:
void *operator new(size_t);
Bien sûr, si vous surchargez un nouvel opérateur (global ou pour une classe), vous aurez aussi envie/besoin de surcharger la correspondance de l'opérateur delete. Pour ce que ça vaut, il y a aussi un opérateur new[] qui est utilisé pour allouer de la mémoire pour les tableaux -- mais vous êtes presque certainement mieux ignorer que les gâchis complètement.
L'opérateur new est ce que vous utilisez normalement pour créer un objet à partir de la boutique:
my_class *x = new my_class(0);
La différence entre les deux est que l'opérateur de nouveau juste alloue de la mémoire brute, rien d'autre. Le nouvel opérateur commence par l'aide de l'opérateur new pour allouer de la mémoire, mais alors il appelle le constructeur pour le type d'objet, de sorte que le résultat est un vrai objet créé dans la mémoire. Si l'objet contient tous les autres objets (ou intégrés comme les classes de base) les constructeurs comme invoqués.
Voici la citation du livre More Effective C ++ de Scott Meyers:
Le nouvel opérateur appelle une fonction pour effectuer l'affectation de mémoire requise, et vous pouvez réécrire ou surcharger cette fonction pour en modifier le comportement. Le nom de la fonction que l'opérateur nouvel appelle pour allouer de la mémoire est opérateur nouvel.
Il n'y a pas de différence entre les "nouveaux opérateur d'opérateur" et "nouveau". Les deux se réfèrent à la même chose: la overloadable/remplaçable operator new
fonction qui effectue généralement brut de l'allocation de mémoire pour les objets créés par les nouvelles-expressions.
Notez également que ni le terme est présent dans la spécification du langage (qui est la définition de la source de la terminologie officielle).
Lorsque vous utilisez new
dans votre programme pour créer un objet, il est appelé nouvelle-expression. Nouvelle expression se compose du mot - new
supplémentaires et syntaxique parties définies par la grammaire. Aucune partie de cette expression est la syntaxe est jamais considéré comme un "opérateur".
Le brut de l'allocation de mémoire de la fonction operator new
est officiellement appelé simplement "operator new
de la fonction". Notez que les mots operator
et new
de cette séquence sont juste deux C++ le langage des mots-clés. Ils ne forment pas un terme anglais "opérateur de nouveau". Nulle part dans la spécification du langage, vous trouverez toutes les références à "l'opérateur de nouveau" comme un terme anglais. Chaque fois que cela est juste une combinaison de deux mots-clés qui produisent de la syntaxe de déclaration pour une fonction d'allocation mémoire.
Encore une fois, en résumé: officiellement, en C++ il n'y a pas de langue anglaise des termes comme "opérateur de nouveau" ou "opérateur". L'ancien séquence est présente dans la spécification du langage comme une simple combinaison de mots-clés, non pas comme un terme anglais. Ce dernier n'est pas présent dans tous les.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.