【发布时间】:2019-05-14 17:40:06
【问题描述】:
来自cppreference,
当复制省略发生时,实现处理源和 省略的复制/移动 (C++11 起) 操作的目标只是两个 引用同一对象的不同方式,以及 该对象发生在两个对象的较晚时间 没有优化就会被破坏(除了,如果 所选构造函数的参数是一个右值引用 对象类型,销毁发生在目标本来应该是 销毁)(C++17 起)。
对于像A a = returnA(); 这样的简单案例,我可以理解在returnA() 中对象没有被销毁,而是在A a; 的情况下发生了销毁,这是后来的时间。
我想不出一种相反的情况,即复制/移动操作的源首先被破坏。我还想要一个自 C++17 以来添加的语句的示例(当所选构造函数的参数是对对象类型的右值引用时例外)
【问题讨论】:
-
那么...您的问题到底是什么?
-
有两个问题:在这种情况下,
returnA中创建的对象可能比它“创建”到的a寿命更长?第二个问题是:C++17中添加的条款是什么意思:(except that, if the parameter of the selected constructor is an rvalue reference to object type, the destruction occurs when the target would have been destroyed) -
“在这种情况下,在 returnA 中创建的对象可能比它“创建”到的 a 寿命更长?”我不确定我是否理解这个问题。引用的段落并没有说有这种情况。
-
你的意思是“来源”还是“目标”?
标签: c++ c++17 copy-elision object-destruction