2009-03-12 2 views
8

Я пытаюсь перегрузить глобальный оператор 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Перегрузка глобального оператора new/delete в C++

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

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

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

ответ

14

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

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

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

2

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

Смежные вопросы