Je ne sais pas si ces deux œuvres pour supprimer:Supprimer un seul tableau d'objet?
p = new int[1];
delete p
et
delete [] p;
Si les deux œuvres, quelle est la différence entre les deux ci-dessus delete
s?
Je ne sais pas si ces deux œuvres pour supprimer:Supprimer un seul tableau d'objet?
p = new int[1];
delete p
et
delete [] p;
Si les deux œuvres, quelle est la différence entre les deux ci-dessus delete
s?
delete p
supprime un seul élément. delete [] p
supprime un tableau. Si vous utilisez new type[]
, utilisez delete []
.
Si vous êtes new
a un []
, alors delete
a un []
. Par ailleurs, il doit y avoir un duplicata exact de ce quelque part.
Un tableau d'une instance est toujours un tableau. Il n'y a tout simplement pas de cas particulier, vous devez donc le traiter comme un tableau et non comme un seul objet. Non-tableau delete
peut se bloquer.
Un tableau d'objets peut être précédé d'un nombre indiquant la taille du tableau. Si c'est le cas, delete[]
, pas delete
, est assez intelligent pour passer le bon pointeur à free
.
Ils sont et non de même. Même si delete p
serait compiler mais pourrait potentiellement causer des problèmes à l'exécution.
delete p
invoquera operator delete(void*)
où delete []
appellera operator delete[](void*)
. Le comportement par défaut est delete[]
pour appeler delete
mais si un opérateur personnalisé pour delete []
a été implémenté, il ne sera pas appelé si vous appelez simplement delete
et vous aurez un problème (probablement silencieux).
La bonne règle est que si vous avez utilisé []
dans le new
, utilisez-le dans le delete
.
Pas une règle générale, une exigence. – GManNickG
Les 'new' et' delete' doivent correspondre, ou vous avez un comportement indéfini. Sembler travailler sur une plate-forme est un résultat possible d'un comportement indéfini, tout comme tout s'écraser terriblement. Ne fais pas ça. – GManNickG