Переопределение глобального нового / удаления в C ++ - это tar baby . Да, это выглядит достаточно просто, но затем вы делаете одно исключение за другим, и вы продолжаете копать все глубже и глубже для себя.
Причина, по которой вы получаете «их новые» и «ваши удаления», заключается в том, что вы, вероятно, используете некую DLL, которая уже загружена и «связана» с существующей новой до загрузки вашей. Они выделяют объект, а затем вы должны удалить его. Вы можете попробовать статически связать вашу программу, чтобы решить эту проблему.
Еще один способ справиться с этим - это реорганизовать ваш код и переопределить новый / удалить как базовый класс, а затем сделать так, чтобы все ваши классы наследовали от него. Утомительно для большого проекта с большим количеством классов, но он будет недвусмысленно определять, для кого вызывается new / delete.
Если вы делаете это как «дешевый» способ изоляции утечки памяти, подумайте о другом. Посмотрите, есть ли у кого-либо из поставщиков инструментальных средств (например, очистить) пробная версия на 2 недели или запустите вашу версию Linux через valgrind .