gpt4 book ai didi

C++:临时参数的生命周期?

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

当创建一个 MyClass 的新实例作为函数的参数时,如下所示:

class MyClass
{
MyClass(int a);
};

myFunction(MyClass(42));

标准是否对析构函数的时间做出任何保证?

具体来说,我可以假设它会在调用 myFunction() 之后的下一条语句之前被调用吗?

最佳答案

临时对象在它们所属的完整表达式结束时被销毁。

完整表达式是不是某个其他表达式的子表达式的表达式。通常这意味着它在 ;(或 ) 结束,用于 ifwhileswitch 等)表示语句的结束。在您的示例中,这是函数调用的结束。

请注意,您可以通过将临时对象绑定(bind)到 const 引用来延长它们的生命周期。这样做会将它们的生命周期延长到引用的生命周期:

MyClass getMyClass();

{
const MyClass& r = getMyClass(); // full expression ends here
...
} // object returned by getMyClass() is destroyed here

如果您不打算更改返回的对象,那么这是一个保存复制构造函数调用的好技巧(与 MyClass obj = getMyClass(); 相比),以防返回值未应用优化。不幸的是,它不是很为人所知。 (不过,我想 C++11 的移动语义会降低它的用处。)

关于C++:临时参数的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2506793/

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