gpt4 book ai didi

c++ - 先到先得 - 堆栈展开或返回值的复制

转载 作者:IT老高 更新时间:2023-10-28 22:20:46 26 4
gpt4 key购买 nike

GetValues() 方法中使用的互斥锁是在 before 复制构造 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();
}

假设 CLockGuardMutex 是 boost lib 提供的标准类。

最佳答案

是的:-)。形式上,返回一个“拷贝”时有两个“拷贝”value:一到一些用于实际返回值的特殊位置,并且返回后的第二个,最终值必须在的地方放置。但是,可以优化其中一个或两个。破坏局部变量发生在第一个之后,第二个之前。 (NRVO和 RVO 可能会导致第一个被优化,但它们不影响你的代码,因为你没有返回一个局部变量。)

关于c++ - 先到先得 - 堆栈展开或返回值的复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com