У меня есть вопрос, касающийся использования 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;
}