Я решил перегрузить операторы 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 ++?
] Как вы справляетесь с подобными вещами? Что ты предлагаешь? Любые комментарии к этому дизайну (хорошие, плохие), безусловно, приветствуются (только не публикуйте такие вещи, как «не изобретайте велосипед с собственными контейнерами»).