En mi proyecto, tengo una clase base abstracta "Base". Me gustaría rastrear todas las asignaciones/desasignaciones dinámicas de objetos que se derivan de "Base". Con este fin, he anulado los operadores nuevos/eliminar en "Base".Obtener el tipo más derivado durante la construcción del objeto
Después de asignar con éxito la memoria en el nuevo operador reemplazado, me gustaría notificar al objeto que estoy utilizando para la memoria de seguimiento que se ha producido una asignación, con el tipo más derivado de la asignación y su tamaño. El tamaño no es un problema (ya que se transfiere directamente al nuevo operador para "Base"), pero obtener el tipo más derivado es un problema.
Me inclino a pensar que esto no es posible en la forma en que trato de hacerlo. Como las partes más derivadas del objeto aún no se han construido, no hay forma de saber cuáles son. Sin embargo, el nuevo operador sobrecargado de la clase "Base" sabe algo sobre el producto final, el tamaño, entonces, ¿es posible saber algo más al respecto?
Para el contexto:
void* Base::operator new(size_t size)
{
void* storage = malloc(size);
if (storage == NULL)
throw std::bad_alloc();
// Notify MemoryTracker an allocation has occurred
// MemoryTracker::Instance().Allocate(type, size);
return storage;
}
+1 No creo que esto sea posible usando 'operator new', pero no puedo probarlo. Tengo curiosidad por ver si voy a demostrar que estoy equivocado una vez más sobre las características del lenguaje C++. :-) – templatetypedef