我有以下代码:
class Class
{
public:
std::string Read()
{
std::lock_guard<std::mutex> lock(mutex_);
return data_;
}
private:
std::mutex mutex_;
std::string data_;
};
首先执行什么 - 由于函数的原因,将在堆栈上创建data_
字符串的本地副本(临时),然后锁定将释放互斥锁,或者它将是其他方式?
如果是这样,以下行会解决问题吗?
return std::string(data_);
Mutex应该保护data_
的并发读/写,以便这些操作不会干扰。
答案 0 :(得分:5)
该函数返回data_
作为右值,因此这里的结果将在执行data_
的析构函数之前从lock
成员计算(当函数退出时) mutex_
已发布。
return std::string(data_);
?否。