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!