102 votes

delete vs delete []

Double Possible:
( POD )la libération de la mémoire : delete[] égal à supprimer ?

Quand j'ai appris le C++, c'était il y a longtemps. On m'a dit de ne jamais utiliser d' delete mais delete[] , le spectacle d' delete[] sur un seul objet sera équivalent à delete. En sachant ne pas faire confiance à des enseignants de trop, je me demande, Est-ce vrai?

Est-il toujours une raison d'appeler à l' delete au lieu de delete[]?

J'ai scanné le peut-être liés à des questions de la SORTE, mais je n'ai pas trouvé de réponse claire.

115voto

icecrime Points 23650

De la norme (5.3.5/2) :

Dans la première variante (supprimer de l'objet), la valeur de l'opérande de supprimer doit être un pointeur vers un non-objet tableau ou un pointeur vers un sous-objet (1.8) soit une base de la classe d'un tel objet (article 10). Si pas, le comportement est indéfini.

Dans la seconde variante (supprimer tableau), la valeur de l'opérande de supprimer doit être la valeur du pointeur à la suite du tableau précédent new-expression. Si non, l' le comportement est indéfini.

Donc, non : ils ne sont en aucune façon équivalente !

54voto

Alex Budovski Points 8932

delete [] est "suppression de vecteur" et correspond au vecteur nouveau, c'est-à-dire new[] .

Vous devez utiliser la paire d'allocateurs correspondante. Par exemple, malloc/free , new/delete , new[]/delete[] , sinon vous obtenez un comportement non défini.

36voto

Simone Points 6673

Non! vous appelez delete[] lorsque vous allouez avec new[] , sinon vous appelez delete .

Ce que l’enseignant vous a dit conduit à un comportement indéfini et, si vous êtes chanceux, à un blocage de l’application.

11voto

jmpcm Points 876

delete est utilisé pour supprimer un seul objet, t tandis que delete[] est utilisé pour supprimer un tableau d'objets. Vérifiez ce lien .

Prograide.com

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.

Powered by:

X