Кажется, я не могу использовать детектор утечки MS для нового выражения `new (std :: nothrow)`.Это верно? - PullRequest
0 голосов
/ 06 марта 2012

Я пытаюсь получить файл и строку, где происходит утечка, с новым выражением new (std::nothrow).

Комментируемое новое выражение в приведенном ниже коде не компилируется.

#include <iostream>

int main()
{
    #ifdef _DEBUG
    int* p = new (_NORMAL_BLOCK, __FILE__, __LINE__) int(10);
//  int* q = new (std::nothrow, _NORMAL_BLOCK, __FILE__, __LINE__) int(10); 
    #else
    int* p = new int(10);
    int* q = new int(10);
    #endif

    _CrtDumpMemoryLeaks();
}

Мне также любопытно узнать, где <iostream> включает <crtdbg.h>. Я просто не мог найти это. Но, конечно, оно должно быть где-то там.

1 Ответ

0 голосов
/ 06 марта 2012

Не напрямую.Microsoft не предоставляет void* operator new(std::nothrow_t, const char* file, int line), но вы можете сделать это самостоятельно.Просто вперед к метательной версии и в обработчике catch return NULL;.

...