Maison >développement back-end >C++ >Comment `delete[]` sait-il combien d'éléments supprimer d'un tableau ?

Comment `delete[]` sait-il combien d'éléments supprimer d'un tableau ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-27 19:46:11763parcourir

How Does `delete[]` Know How Many Elements to Delete from an Array?

Comment delete[] déchiffre un tableau

Le code en question :

void deleteForMe(int* pointer)
{
     delete[] pointer;
}

a un comportement indéfini si le pointeur ne pointe pas vers un tableau, car il effectue aveuglément une opération delete[]. Cependant, lorsque le pointeur fait référence à un tableau, comme dans :

int main()
{
     int* arr = new int[5];
     deleteForMe(arr);
     return 0;
}

le système d'exploitation sait d'une manière ou d'une autre qu'il doit supprimer uniquement les éléments spécifiés du tableau et ne pas aller au-delà.

La clé de ce comportement réside dans les racines historiques du C en tant que langage compatible C. Pour éviter de surcharger les programmeurs qui n'utilisent pas de tableaux avec une surcharge inutile, la syntaxe delete[] a été introduite.

Lorsqu'une allocation non-tableau est effectuée, telle que :

Foo* foo = new Foo;

aucun supplément des frais généraux sont engagés pour la prise en charge des baies. Toutefois, pour les allocations de tableaux, cette surcharge existe. Pour indiquer que les bibliothèques d'exécution doivent utiliser ces informations, le programmeur doit spécifier delete[] pour les pointeurs de tableau.

Ainsi, le choix entre delete et delete[] est basé sur l'allocation spécifique à supprimer. Cela permet une gestion plus fine de la mémoire et s'aligne sur la philosophie du minimalisme de C.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn