gpt4 book ai didi

c++ - 先发生什么 - 堆栈展开或返回值的复制

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:15 24 4
gpt4 key购买 nike

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();
}

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

最佳答案

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

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

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