Imaginez l'extrait de code suivant :
void* my_alloc(size_t size) { return new char[size]; } void my_free(void* ptr) { delete[] ptr; }
Est-il sécuritaire de supprimer le pointeur vide, ptr, dans ce manière ?
Réponse :
Selon la norme C, il s'agit d'une pratique dangereuse. La section 5.3.5/3 se lit comme suit :
"Dans la première alternative (supprimer l'objet), si le type statique de l'opérande est différent de son type dynamique, le type statique doit être une classe de base de l'opérande. Le type dynamique de l'opérande et le type statique doivent avoir un destructeur virtuel ou le comportement est indéfini. Dans la deuxième alternative (supprimer un tableau), si le type dynamique de l'objet à supprimer diffère de son type statique, le comportement est. undefined."
La note de bas de page qui suit ce passage souligne en outre :
"Cela implique qu'un objet ne peut pas être supprimé à l'aide d'un pointeur de type void* car il n'y a pas d'objets de type void."
Par conséquent, la suppression via un pointeur vide est strictement interdite car elle peut entraîner un comportement imprévisible.
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!