C ++ - 函数结束和本地销毁顺序

时间:2014-09-16 09:29:00

标签: c++

我有以下代码:

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_的并发读/写,以便这些操作不会干扰。

1 个答案:

答案 0 :(得分:5)

该函数返回data_作为右值,因此这里的结果将在执行data_的析构函数之前从lock成员计算(当函数退出时) mutex_已发布。

  • 是否在释放互斥锁之前计算的临时值(返回值)?是。
  • 是否需要return std::string(data_);?否。