临时函数参数的生命周期是多长? [复制]

2024-03-14

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

class MyClass
{
  MyClass(int a);
};    

myFunction(MyClass(42));

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

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


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

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

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

MyClass getMyClass();

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

如果您不打算更改返回的对象,那么这是一个保存复制构造函数调用的好技巧(与MyClass obj = getMyClass();),以防未应用返回值优化。不幸的是它并不是很出名。 (不过,我认为 C++11 的移动语义会使其不太有用。)

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

临时函数参数的生命周期是多长? [复制] 的相关文章

随机推荐