Я решил перегрузить новые, новые операторы [], ... в моих классах, чтобы я мог регистрировать файл и строку, в которой они были вызваны, чтобы я мог легче отслеживать выделения / утечки памяти.
Теперь проблема в моих классах стека и массива (и других шаблонных классов-контейнеров, которые выделяют память):
Если я использую их с одним из моих классов, у которого перегружены операторы new, new [], ..., он работает нормально.
Но если я использую его со стандартными типами данных c ++ (int, float, ...), я не могу выделить их, поскольку ни один перегруженный оператор new не соответствует аргументам нового (__ LINE __, __ FILE __) оператор (или другие, такие как размещение новых).
Пример кода стека:
// placement new
T* t=new(__ LINE __ , __ FILE__)(&m_data[i])T;
Так что у меня нет хороших идей о том, как заставить это работать. Если я заменяю новый (__LINE __, __ FILE __) новым, я теряю возможность регистрации в памяти.
Одним из решений является создание отдельного стека для стандартных типов данных, в которых используется новый по умолчанию.
Есть ли способ обнаружить во время компиляции, является ли параметр шаблона структурой, классом или встроенным типом c ++?
Как вы справляетесь с такими вещами?
Что ты предлагаешь?
Любые комментарии к этому дизайну (хорошие, плохие), безусловно, приветствуются (просто не публикуйте такие вещи, как «не изобретайте колесо с вашими собственными контейнерами»).