Mon programme C++ a besoin d'un bloc de mémoire non initialisée et d'un pointeur void*
pour que je puisse le donner à une bibliothèque tierce. Je veux passer le contrôle de la durée de vie du bloc à la bibliothèque, donc je ne veux pas utiliser std::vector
. Lorsque la bibliothèque est terminée avec le bloc, elle appelle un callback que je dois fournir et qui libère le bloc. En C je voudrais utiliser malloc()
et plus tard free()
.Lequel utiliser - "operator new" ou "operator new []" - pour allouer un bloc de mémoire brute en C++?
En C++ je peux appeler soit ::operator new
ou ::operator new[]
et ::operator delete
ou operator delete[]
respectivement plus tard:
void* newBlock = ::operator new(sizeOfBlock);
// then, later
::operator delete(newBlock);
On dirait que les deux ::operator new
et ::operator new[]
ont exactement la même signature et exactement le même comportement. La même chose pour ::operator delete
et ::operator delete[]
. La seule chose que je ne devrais pas faire est d'appairer operator new
avec operator delete[]
et vice versa - comportement indéfini. A part ça, quelle paire dois-je choisir et pourquoi?
Je suppose que vous savez que vous devriez utiliser 'std :: vector', yadda yadda. –
GManNickG
Pourquoi pensez-vous qu'avec std :: vector vous n'avez aucun contrôle sur la durée de vie de l'objet? –
La question n'est pas claire. Avez-vous le contrôle de la désaffectation ou confiez-vous cette responsabilité à une bibliothèque? Toutes les réponses d'avant cette modification ne répondent pas aux exigences modifiées. –