CWG 1885的存在似乎意味着在 C++14 之前,以下代码不能保证线程安全
std::string get_string()
{
std::unique_lock<std::mutex> lock(some_shared_mutex);
return some_shared_string;
}
Run Code Online (Sandbox Code Playgroud)
因为函数退出时事件的顺序无法保证 - 例如,lock在要返回的临时对象从 复制初始化之前可能会被销毁some_shared_string,从而导致竞争条件。
这在实践中似乎不太可能成为问题——这是它的主要优点之一unique_lock是你应该能够做这样的事情,我会有点惊讶地发现实现并不能保证即使标准没有这样做。
所以我的问题