En C, l'allocation et la suppression de mémoire jouent un rôle crucial dans la gestion de la mémoire dynamique. Alors que les opérateurs standard « nouveau » et « supprimer » sont couramment utilisés, « placement nouveau » et « supprimer » fournissent une approche spécialisée pour l'allocation et la suppression de mémoire.
L'exemple d'extrait de code présenté soulève des questions sur la méthode appropriée pour supprimer la mémoire allouée à l'aide du « placement nouveau ». Dans le code, la mémoire est allouée avec la ligne :
void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
puis un objet "Buffer" est placé à cet emplacement mémoire en utilisant "placement new":
Buffer* buf = new(mem) Buffer(strlen(charString));
La question se pose de savoir s'il faut supprimer la mémoire en utilisant :
delete (char*)buf;
ou simplement :
delete buf;
Pour supprimer correctement la mémoire allouée, il est important de respecter directives spécifiques :
buf->~Buffer();
::operator delete(mem);
Désallocation correcte :
La méthode correcte pour supprimer la mémoire allouée est la suivante :
buf->~Buffer(); ::operator delete(mem);
En suivant ces étapes, vous vous assurez que la mémoire allouée avec « placement new » est correctement désallouée, évitant ainsi les fuites de mémoire potentielles.
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!