Mi programa C++ necesita un bloque de memoria no inicializada y un puntero void*
a ese bloque para que pueda entregarlo a una biblioteca de terceros. Quiero pasar el control de la vida útil del bloque a la biblioteca, por lo que no quiero usar std::vector
. Cuando la biblioteca termine con el bloque, se llamará a una devolución de llamada que tengo que suministrar y eso desasignará el bloque. En C usaría malloc()
y más tarde free()
.¿Qué usar - "operador nuevo" u "operador nuevo []" - para asignar un bloque de memoria sin procesar en C++?
En C++ puedo llamar ya sea ::operator new
o ::operator new[]
y ::operator delete
o operator delete[]
respectivamente después:
void* newBlock = ::operator new(sizeOfBlock);
// then, later
::operator delete(newBlock);
Parece que tanto ::operator new
y ::operator new[]
tienen exactamente la misma firma y exactamente el mismo comportamiento. Lo mismo para ::operator delete
y ::operator delete[]
. Lo único que no debería hacer es vincular operator new
con operator delete[]
y viceversa - comportamiento indefinido. ¿Aparte de qué par elegir y por qué?
Supongo que usted sabe que debe usar 'std :: vector', yadda yadda. –
GManNickG
¿Por qué crees que con std :: vector no tienes control sobre la vida útil del objeto? –
La pregunta no está clara. ¿Tiene control sobre la desasignación o transfiere esa responsabilidad a una biblioteca? Todas las respuestas anteriores a esa edición no abordan los requisitos modificados. –