71 votes

placement nouveau et supprimer

Quelle est la bonne méthode pour supprimer toute la mémoire allouée ici ?

   const char* charString = "Hello, World";
  void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
  Buffer* buf = new(mem) Buffer(strlen(charString));

  delete (char*)buf;

OU

   const char* charString = "Hello, World";
  void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
  Buffer* buf = new(mem) Buffer(strlen(charString));

  delete buf;

ou sont-ils tous les deux identiques ?

73voto

bdonlan Points 90068

La bonne méthode est :

 buf->~Buffer();
::operator delete(mem);

Vous ne pouvez supprimer le delete opérateur que vous avez reçu de l' new opérateur. Si vous appelez directement la fonction operator new , vous devez également appeler directement la fonction operator delete et devez également appeler manuellement le destructeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X