Получение наиболее производного типа при конструировании объекта

В моем проекте у меня есть абстрактный базовый класс «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;
}
5
задан Wells 28 July 2011 в 19:34
поделиться