Nothrow常量:此常量值用作参数 operator new和operator new []表示这些函数应该 不要在失败时抛出异常,而是返回空指针。
但是在这个简单的例子中,new
抛出异常而不是返回NULL:
struct SomeStruct
{
SomeStruct()
{
std::bad_alloc exception;
throw exception;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
SomeStruct* somestruct;
somestruct = new (std::nothrow) SomeStruct;
return 0;
}
请问有什么解释吗?它只是表明,尽管(std::nothrow)
参数new
,我们仍然需要将代码放在try...catch
块中。
答案 0 :(得分:3)
std::nothrow
表示std::bad_alloc
表达式返回new
而不是nullptr
未能获取内存。这并不意味着new
表达式不会抛出。
如果SomeStruct
没有引入其构造函数,new
表达式将永远不会抛出。
答案 1 :(得分:0)
异常不是从new
引发的,而是来自SomeStruct
c-tor。
new
将抛出异常。如果在无法分配内存时使用std::nothrow
常量,new
将返回NULL
。
在这种情况下,您应该在继续之前检查指针NULL
。
if (somestruct == NULL)
// error
else
// continue