Пользовательская память, выделяемая и освобождаемая для нескольких классов наследования

Я хочу сделать управление памятью в моем проекте. Я не хочу оператора глобального нового / удаления, поэтому я реализую простой аллектор памяти. это мой код:

class IAllocator
{
public:
    void* Alloc( unsigned int size )
    {
        1. alloc memory.
        2. trace alloc.
    }
    void Dealloc( void* ptr )
    {
        1. free memory.
        2. erase trace info.
    }
    template< typename T >
    void Destructor( T* ptr )
    {
        if ( ptr )
            ptr->~T();
    }
};
// macro for use easy.
# define MYNEW( T ) new ( g_Allocator->Alloc( sizeof( T ) ) ) T
# define MYDEL( ptr ) if (ptr) { g_Allocator->Destructor(ptr); g_Allocator->Dealloc(ptr); }

Затем я могу использовать MYNEW для создания объекта (также отслеживать информацию о выделении для проверки утечки памяти) и MYDEL для уничтожения объекта (удалить информацию о трассировке).

Все выглядит хорошо ... но, когда я пытаюсь использовать этот метод для множественного класса наследования, я обнаружил очень серьезную проблему. посмотрите мой тестовый код ниже:

class A { ... };
class B { ... };
class C : public A, public B { ... };

C* pkC = MYNEW( C );
B* pkB = (B*)pkA;
MYDEL( pkB );

адреса pkB и pkA не равны. так что память не будет освобождена правильно, и информация трассировки alloc не сотрет слишком корректно ... о ...

Есть ли способ решить эту проблему?

Ответы на вопрос(2)

Ваш ответ на вопрос