(我修改了原来的问题更有意义)
关于return语句,Raii对象是在return语句之前/之后/之间销毁的吗?
例如
size_t advance() {
boost::lock_guard<boost::mutex> lock(mutex_);
return value_++; // is lock destroyed after increment?
}
谢谢
答案 0 :(得分:2)
要回答您修改过的问题,请给出以下代码:
return X;
将始终在返回之前评估X.然后发生的事情等同于退出函数的所有嵌套作用域,从最内层到最外层,在每个出口处适当地调用析构函数。
答案 1 :(得分:1)
您可以使用析构函数编写自己的简单类来轻松测试,例如
class X
{
public:
~X() { std::cout << "X::destructor" << std::endl;
}
size_t advance()
{
X x;
return value++;
}
在X的析构函数中放一个中断,看看当时值是否已增加。您也可以尝试使用/ FA(Visual Studio)进行编译,并查看编译器生成的程序集。
答案 2 :(得分:0)
是的 - 它们是等同的。增量后锁定被销毁。否则你会遇到与后一种情况相同的问题。