方法中使用的互斥锁是在复制构造实例之前还是之后GetValues()发布的?dummy
class Protect
{};
class Test
{
public:
Protect GetValues() const;
private:
Protect m_protVal;
Mutex m_mutex;
};
Protect Test::GetValues() const
{
CLockGuard lock(m_mutex);
return m_protVal;
}
int main(int argc, char** argv)
{
Test myTestInstance;
Protect dummy = myTestInstance.GetValues();
}
Run Code Online (Sandbox Code Playgroud)
让我们假设CLockGuard并且Mutex是boost lib提供的标准类.
Jam*_*nze 12
是:-).在形式上,返回值时有两个"副本":一个用于实际返回值的某个特殊位置,另一个返回后返回到最终放置值的位置.然而,可以优化其中之一或两者.局部变量的破坏发生在第一个之后,但在第二个之前.(NRVO和RVO可能导致第一个被优化,但它们不会影响您的代码,因为您没有返回局部变量.)