Maison >développement back-end >C++ >Puis-je supprimer des objets en toute sécurité via un pointeur vide en C ?
Pointeurs vides et suppression d'objets
En C, les pointeurs vides peuvent être utilisés pour stocker des adresses d'objets de tout type. Une question courante se pose : pouvons-nous supprimer des objets en toute sécurité via un pointeur vide ?
Le problème :
Considérez le code suivant :
void* my_alloc(size_t size) { return new char[size]; } void my_free(void* ptr) { delete [] ptr; }
Ici, my_alloc alloue un tableau de caractères et renvoie un pointeur vide. my_free tente de supprimer l'objet pointé par le pointeur vide.
La réponse :
Supprimer un objet via un pointeur vide sans lancer est un comportement indéfini selon le C Norme (5.3.5/3). Cela signifie que le comportement peut varier selon les compilateurs et les plates-formes.
La raison de ce comportement non défini est que le compilateur ne peut pas déterminer le type réel de l'objet à supprimer. Par conséquent, il est impossible de garantir que le bon destructeur sera appelé, ce qui pourrait entraîner une corruption de la mémoire ou d'autres comportements inattendus.
Approche sûre :
Pour supprimer en toute sécurité objets via un pointeur vide, il doit être converti en type de pointeur d'origine qui a alloué l'objet. Cela garantit que le bon destructeur est appelé et que toutes les ressources associées à l'objet sont correctement nettoyées.
Par exemple, dans le code ci-dessus, la suppression doit être effectuée comme suit :
char* ptr = (char*)my_alloc(size); delete [] ptr;
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!