假设以下代码:
Foo* p = new (std::nothrow) Foo();
Run Code Online (Sandbox Code Playgroud)
如果我们没有堆内存,'p'将等于0.
如果我们不是内存但Foo的构造函数抛出会发生什么?将'new'和'p'设置为0的nothrow版本会"掩盖"该异常吗?...或者从Foo的构造函数抛出的异常是否会使其脱离函数?
我刚尝试过.例外确实可以通过.如果您运行以下代码:
#include <new>
class Foo
{
public:
Foo()
{
throw 42;
}
};
int main()
{
Foo* foo = new(std::nothrow) Foo;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后你得到以下输出(无论如何在Linux上):
terminate called after throwing an instance of 'int'
Aborted
Run Code Online (Sandbox Code Playgroud)
因此,尽管没有提及,但这个例外确实得到了解决.
| 归档时间: |
|
| 查看次数: |
2502 次 |
| 最近记录: |