Проблемы с перегрузкой новых операторов

Я решил перегрузить операторы new, new [], ... в моих классах, чтобы я мог регистрировать файл и строку, в которой они были вызваны, чтобы мне было легче отслеживать выделение памяти /leaks.

Теперь проблемы в моих классах стека и массива (и других классах контейнеров-шаблонов, которые выделяют память):

Если я использую их с одним из моих классов, у которого есть new, new [], .. . операторы перегружены, он работает нормально.

Но если я использую его со стандартными типами данных C ++ (int, float, ...), я не могу их выделить, так как ни один перегруженный оператор new не соответствует аргументам нового (__ LINE __, __ FILE __) (или другие, например, размещение new).

Пример кода стека:

// placement new
T* t=new(__ LINE __ , __ FILE__)(&m_data[i])T;

Так что у меня нет хороших идей, как заставить это работать. Если я заменю новый (__ LINE __, __ FILE __) новым, я потеряю возможность ведения журнала памяти. Одним из решений является создание отдельного стека для стандартных типов данных, в котором используется значение по умолчанию new.

Есть ли способ определить во время компиляции, является ли параметр шаблона структурой, классом или встроенным типом C ++?

] Как вы справляетесь с подобными вещами? Что ты предлагаешь? Любые комментарии к этому дизайну (хорошие, плохие), безусловно, приветствуются (только не публикуйте такие вещи, как «не изобретайте велосипед с собственными контейнерами»).

8
задан Lightness Races with Monica 22 July 2011 в 10:20
поделиться