Ha confundido el nuevo operador y el operador nueva función. No hay problema, todos lo hacen. Son casi lo mismo, excepto que son diferentes.
La función void* operator new(size_t)
toma un bloque de memoria sin formato del árbol en el que crece y lo devuelve al programa.
void* raw_memory = ::operator new(42);
Es una función ordinaria con el nombre un tanto extraño.
El nuevo operador no es una función ni una función de llamada. Es una construcción de lenguaje por separado. Toma memoria en bruto (normalmente, una devuelta por la función void* operator new(size_t)
) y la convierte en un objeto llamando a un constructor. Luego devuelve un puntero correctamente tipeado al objeto recién creado.
Fish* f = new Fish;
ACTUALIZACIÓN Naturalmente, también existe la Suprimir operador (lo contrario del operador nuevo) y la función void operator delete(void*)
(lo contrario de la función void* operator new(size_t)
).
También están los nueva [] operador, el delete [] operador, la función void* operator new[](size_t)
y la función void operator delete[](void*)
; se ocupan de matrices de objetos (a diferencia de los objetos individuales).
También se conocen los llamados "nuevos emplazamientos" que no llaman a ninguna de las funciones operator new
para la memoria nueva, sino que requieren un puntero explícito para la memoria sin procesar. No tienen los correspondientes formularios incorporados de "eliminación". Puedes enrollar el tuyo si lo deseas, pero me niego a hablar sobre esto mientras estoy sobrio.
Lea esto: http://stackoverflow.com/questions/2697892/what-is-return-type-of-new-in-c; operador nuevas y nuevas expresiones no son lo mismo. – Mat
Además, este: http://stackoverflow.com/questions/2941888/how-operator-new-calls-the-constructor-of-class - Creo que ambos responden a su pregunta. – Mat
También: gracias a ti Mat! – Peter