好像我不能使用MS泄漏检测器来表达新的表达式`new(std :: nothrow)`。那是对的吗?

时间:2012-03-06 13:16:14

标签: c++ visual-studio memory-leak-detector crtdbg.h

我正在尝试使用新表达式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 :(得分:0)

不直接。 Microsoft不提供void* operator new(std::nothrow_t, const char* file, int line),但您可以自己轻松地提供catch。只需转发投掷版本,然后转到return NULL;处理程序{{1}}。