Когда вы определяете _DEBUG и включаете <crtdbg.h>
, вы получаете перегруженный operator new
, который принимает дополнительные параметры, которые можно использовать для указания номеров файлов и строк в выражениях new
.
* 1006 Е.Г. *
int* p = new (_NORMAL_BLOCK, __FILE__, __LINE__) int(5);
Вы можете заключить это в условно определенный макрос, например,
#ifdef _DEBUG
#define DEBUG_NEW_PLACEMENT (_NORMAL_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_NEW_PLACEMENT
#endif
int* p = new DEBUG_NEW_PLACEMENT int(5);
В то время как вы видите людей, определяющих макрос new
, чтобы полностью скрыть этот клиентский код формы, я лично не рекомендую его, поскольку он ломает все, что уже сделано намеренно, с использованием размещения new, и вы должны убедиться, что любые заголовки, использующие размещение new ( например, многие стандартные заголовки) перед любым переопределением заголовка new
. Это позволяет легко использовать некоторые встроенные варианты использования new
в заголовочных файлах без «корректировки».