Quelle est la différence entre modifier em> p>
Eh bien, bien, j'aurais dû fournir le fond, désolé pour cela. J'évaluais l'évaluation des limites au travail avec VS 2010 et elle s'est plainte d'une fuite de mémoire lorsque j'ai utilisé Suppr [] sur Nouveau [1]. Donc, en théorie, je sais comment la nouvelle et la nouvelle paire devrait être utilisée, mais cette situation particulière m'a confondu sur les choses sous la hotte. Toute idée de ce qui se passe? P> nouveau code> et
neuf [1] code>? Puis-je utiliser
Supprimer code> avec
Nouveau [1] code>? P>
4 Réponses :
'Nouveau [1]' crée un tableau d'un élément. Besoin d'utiliser Supprimer [] code> pour libérer la mémoire.
Nouveau code> crée simplement un objet. Utilisez
Supprimer code> avec elle. P>
Nouveau code> crée une instance, tandis que
Nouveau [1] code> crée une matrice à élément unique.
Nouveau [1] CODE> va presque certainement engager (petit) en tête de mémoire par rapport à
Nouveau code> pour stocker la taille de la matrice. Vous ne pouvez pas utiliser de constructeurs non par défaut avec
nouveau [] code>. P>
Nouveau code> doit être utilisé avec
Supprimer code>. p>
nouveau [] code> doit être utilisé avec
Suppr [] code>. P>
+1 Pour mentionner que vous devez avoir un constructeur par défaut lors de l'utilisation de nouveaux []. Ceci est souvent négligé.
D'autre part, sur la plupart des systèmes, il n'y aura aucune différence dans la mémoire de mémoire pour les types de destructeurs triviaux (mais une différence est autorisée).
ed et Aix a raison, mais il y a beaucoup plus de choses en dessous de la capuche.
Si vous utilisez de nouvelles, puis supprimez, l'appel de suppression exécutera un destructeur. P>
Si vous utilisez de nouveaux [], vous devez utiliser Suppr [], mais comment supprimer [] savoir combien de destructeurs à appeler? Il pourrait y avoir une gamme de 2 instances, ou l'une des 2000 cas? Ce que certains compilateurs (éventuellement la plupart ou tous) font, est de stocker le nombre d'instances juste avant la mémoire qu'il vous revient. P>
Donc, si vous appelez Nouveau [5], alors nouveau allouera une mémoire comme celle-ci. : p> et vous obtenez un pointeur à l'instance1. p> Si vous appelez ultérieurement supprimer [], Supprimer [] utilisera le numéro (dans cette Cas 5) Pour voir combien de destructeurs doivent appeler avant de libérer la mémoire. P> Notez que si vous mélangez de nouvelles avec Suppr [] ou neuf [] avec Supprimer, il peut aller horriblement, car le Le nombre peut être manquant ou le nombre peut être incorrect. p> Si vous mélangez de nouvelles [1] avec des travaux de suppression, vous serez peut-être chanceux, mais ne comptez pas dessus. P> P> P> P> P> P> P> P> P> P> P> >
Nouveau [] est un opérateur pour allouer et initialiser un réseau d'objets et renvoyer un pointeur sur le premier élément. Cela diffère du nouvel opérateur qui a le même comportement, mais pour une allocation, pas un tableau. Pour la répartition et la destruction de l'objet, les nouveaux devraient être utilisés avec Supprimer et neuf [] avec Suppr [].
// operator new[] and new example // create array of 5 integers int * p1 = new int[5]; delete[] p1; // regular allocation of one int int * p1 = new int; delete p1;