返回值的复制构造函数何时发生

2023-11-27

我有以下成员函数:

Person ClassB::DoSomethingAndReturnPerson()
{
 RAIIMutex myLock(&m_mutex);
 return m_person;
}

RAIIMutex是一个辅助类,它接收互斥体并将其锁定在构造函数中并在析构函数中释放。

m_person属于类型Person(尺寸非常小的东西)。其他线程中的其他函数可能会更改此成员。

我想回来m_person按值(返回副本),当然我想避免出现以下情况:m_person在另一个线程中更改它,同时在返回中复制它,因此我添加了锁。

但首先会发生什么?编译器是否首先创建一个副本m_person或者首先调用析构函数myLock ?

理论上,通过执行以下操作很容易解决:

Person ClassB::DoSomethingAndReturnPerson()
{
 RAIIMutex myLock(&m_mutex);
 Person tmp = m_person;
 return tmp;
}

但我有兴趣知道我的问题的答案。

Thanks


返回值的复制初始化将在之前进行处理。

从标准来看,[stmt.return]/3(强调我的)

调用结果的复制初始化在之前排序 完整表达结束时临时体的破坏 由 return 语句的操作数建立,反过来,是 在销毁局部变量([stmt.jump])之前排序 包含 return 语句的块.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回值的复制构造函数何时发生 的相关文章

随机推荐