Supongamos que necesito sobrecargar global ::operator new()
for storing extra data with each allocated object. Así que básicamente sería trabajar de esta manera:¿Cómo llamo al "operador nuevo" original si lo sobrecargué?
- para cada llamada al mundial
::operator new()
que tomará el tamaño del objeto pasado y añadir el tamaño de los datos adicionales - se asignar un bloque de memoria de tamaño deduce al anterior paso
- se procederá a compensar el puntero a la parte del bloque no está ocupado con los datos adicionales y de retorno que compensan el valor de la persona que llama
::operator delete()
hará lo mismo a la inversa - SH si el puntero, acceda a datos adicionales, desasigne la memoria.
Ahora la pregunta es ¿cómo asigno la memoria? Por supuesto, puedo llamar al malloc()
o a alguna función específica de la plataforma (así es como generalmente se hace). Pero normalmente cuando necesito asignar memoria cruda en C++, llamo al ::operator new()
. ¿Puedo llamar al ::operator new()
original para hacer la asignación de memoria desde mi sobrecargado global ::operator new()
?
¿Quieres decir sobrecargado o reemplazado? Si está sobrecargado, simplemente llame al operador original nuevo usando el conjunto correcto de argumentos. Si se reemplaza, entonces no puedes, pero creo que esto es _por qué_ 'malloc' está garantizado para no usar' operator new' en su implementación (es decir, no hay bucles involuntarios cuando se reemplaza el operador new) por lo que probablemente deberías estar usando 'malloc' . –
@CharlesBailey ¡Escribió su respuesta como comentario! ¡para vergüenza! –