是在lock_guard析构函数之前还是之后执行返回时复制操作?

时间:2018-12-04 13:04:08

标签: c++ thread-safety destructor race-condition stdmutex

let-car="rowData"函数在竞争条件下是否安全?是否需要像get_a()中一样显式复制str_才能具有线程安全功能?

get_b()

注意:我知道在Stack Overflow上也有类似的问题,但是我找不到一个明确回答该问题的问题。

1 个答案:

答案 0 :(得分:11)

[stmt.return]p3

  

return语句的操作数建立的全表达式结束时,调用结果的复制初始化在临时变量销毁之前进行排序,而该操作数依次在破坏return语句所在块的局部变量。

这意味着将按顺序进行以下操作:

  1. 返回对象已复制初始化
  2. return语句中的任何临时对象都将被破坏
  3. 局部变量被破坏

因此,我们可以推断出get_a是完全安全的。