В моем проекте у меня есть абстрактный базовый класс «Base». Я хотел бы отслеживать все динамические выделения / освобождения объектов, производные от «Базы». С этой целью я переопределил операторы new / delete в «Base».
После успешного выделения памяти в переопределенном операторе new я хотел бы уведомить объект, который я использую для отслеживания памяти, о том, что выделение имеет произошел, с наиболее производным типом распределения и его размером. Размер не является проблемой (поскольку он передается непосредственно оператору new для «Base»), но получение наиболее производного типа является проблемой.
Я склоняюсь к мысли, что это невозможно в как я пытаюсь это сделать. Поскольку более производные части объекта еще не созданы, узнать, что они из себя представляют, невозможно. Однако перегруженный оператор new «базового» класса кое-что знает о конечном продукте - его размер - так можно ли узнать что-нибудь еще о нем?
Для контекста:
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;
}