似乎我不能将 MS 检漏仪用于新表达式“new (std::nothrow)”。那是对的吗?
Posted
技术标签:
【中文标题】似乎我不能将 MS 检漏仪用于新表达式“new (std::nothrow)”。那是对的吗?【英文标题】:It seems like I cannot use MS leak detector for the new expression `new (std::nothrow)`. Is that correct? 【发布时间】:2012-03-06 13:16:14 【问题描述】:我正在尝试使用新表达式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】:不直接。 Microsoft 不提供void* operator new(std::nothrow_t, const char* file, int line)
,但您可以自己轻松地这样做。只需转发到 throwing 版本和 catch
处理程序 return NULL;
。
【讨论】:
这似乎是答案。我知道这是一个小细节,但是您是否知道<crtdbg.h>
文件包含在<iostream>
中的哪个位置?
我终于找到了<crtdbg.h>
包含在<iostream>
中的位置:
我终于找到了<crtdbg.h>
在<iostream>
中的位置:iostream > isstream > osstream > ios > xlocnum > streambuf > xiosbase > xlocale > stdexcept > xstring > xmemory > xutility > crtdbg
。以上是关于似乎我不能将 MS 检漏仪用于新表达式“new (std::nothrow)”。那是对的吗?的主要内容,如果未能解决你的问题,请参考以下文章
TS2351:不能将“new”与类型缺少调用或构造签名的表达式一起使用。角度 8
错误“不能将 'new' 与类型缺少调用或构造签名的表达式一起使用。”导入 Esri 类型时
Modbus转Profinet网关连接皖仪氦质谱检漏仪SFJ-16M通信配置案例