我不确定如何对这个问题发表评论,以便谷歌可以帮助我。
今天早些时候一位同事问我(换句话说):
给出以下代码:
struct Foo
{
Foo() {throw 1;}
}
Foo* bar()
{
Foo *p = NULL;
try
{
p = new Foo();
}
catch (...) {}
return p;
}
根据C ++标准,bar()保证返回NULL,还是行为实现定义?我猜它是后者,从我读过的关于在C ++中被破解的双重检查锁定习语的文章。
答案 0 :(得分:4)
如果构造函数抛出,则不会发生赋值,因此p
具有之前的任何值。
是的,bar
保证在您的代码段中返回NULL
。
这与双重检查锁定无关;这是一个无关的并发问题。