Перегрузка глобального оператора new/delete в С++

Я пытаюсь перегрузить глобальный оператор new и удалить для чувствительного к производительности приложения. Я ознакомился с опасениями, описанными на странице http://www.informit.com/articles/article.aspx?p=30642&seqNum=3 и рекомендации по использованию распределителя Intel TBB http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htm

Так как перегружаю новые и удаляю впервые, у меня есть несколько вопросов.

Должен ли я включать мой новый заголовок Allocator.h (или Pre.h), содержащий перегруженную новую функцию, во все файлы, содержащие «новые» вызовы? Это утомительно.

Или я должен использовать "gcc -include Allocator.h...", который включает Allocator.h (ранее) в каждую единицу перевода? Я хочу, чтобы кодовая платформа была как можно более независимой. Все ли компиляторы поддерживают нечто подобное gcc -include?


person amit    schedule 12.03.2009    source источник


Ответы (2)


Если вы хотите перегрузить глобальные operator new и operator delete, вам просто нужно это реализовать. Вам не нужно явно определять его везде, поскольку он уже определен как часть языка.

Редактировать: если вы хотите определить новый оператор, который принимает другие параметры, вам нужно #include его везде. Как бы вы ни поступили, это зависит от вас; это в основном вопрос стиля.

И не забудьте реализовать все варианты глобального оператора new и delete: new, new[], delete, delete[] и варианты std::nothrow.

person MSN    schedule 12.03.2009

Если вы используете Visual Studio и используете предварительно скомпилированные заголовки, вы можете добавить туда включение. Я думаю, что gcc также имеет некоторую форму предварительной компиляции заголовков, что также улучшит время вашей компиляции.

person wchung    schedule 12.03.2009