【发布时间】:2011-01-19 08:39:51
【问题描述】:
对f() 的调用是否异常安全?
inline std::auto_ptr<C> auto_new() {
return std::auto_ptr<C>(new C());
}
void f(std::auto_ptr<C> p1,
std::auto_ptr<C> p2);
// ...
{
f(auto_new(), auto_new());
}
换句话说,如果第一个和第二个auto_new() 函数调用是内联的,那么这两个函数调用的原子性有什么区别吗?
【问题讨论】:
-
什么让你困惑?
inline? -
是的,它是
inline关键字。这意味着函数的主体可以就地替换,我想这会使代码在原子性方面看起来不那么可靠。 -
@wilhelmtell:唯一在您将函数内联时发生的强制更改是对一个定义规则的更改。其他一切都可能保持不变。
-
@CharlesBailey 是的,但您可以从中推断出很多。如果编译器跨编译单元看到主体,则意味着它可以在其他情况下无法内联代码。但这与问题无关。
-
我不确定我是否理解你的意思。最初您似乎认为
inline可能会以其他方式改变语言规则,我只是想弄清楚实际发生变化的规则。编译器可以做很多事情,但不能在他们喜欢的时候合法地任意无视语言规则。
标签: c++ function-call exception-safety