我有一个关于使用(或类似的作用域锁)和使用语句boost::lock_guard
中应受锁保护的变量的问题。return
销毁本地对象和复制返回值的顺序是怎样的?返回值优化如何影响这一点?
例子:
Data Class::GetData()
{
boost::lock_guard<boost::mutex> lock(this->mMutex);
return this->mData;
}
这是否正确(如果 mData 是受 mMutex 保护的变量)?或者我是否必须使用本地范围和临时范围,如下例所示:
Data Class::GetData()
{
Data ret;
{
boost::lock_guard<boost::mutex> lock(this->mMutex);
ret = this->mData;
}
return ret;
}