我无法理解RVO (和NRVO)的定义,因为就像这个存在多个问题,在我看来,这些问题假设RVO忽略了一个复制构造函数。现在根据12.8.15
在这种情况下,实现将省略复制操作的源和目标视为引用同一对象的两种不同方式,并且该对象的销毁发生在如果不进行优化就会销毁这两个对象的后期。
它看起来不是复制构造函数调用被省略了,而是复制本身--只是对象首先是在“复制”位置构造的,所以根本没有“原始”对象,也没有复制。因此,即使一个类有一个private副本构造函数,它也可以在RVO启动时从函数返回,因为没有副本。
我做得对吗?复制本身是省略了还是复制构造函数调用省略了?当对象类具有私有副本构造函数时,是否应该允许从函数返回对象?
发布于 2012-04-24 06:34:57
复制本身是省略了还是复制构造函数调用省略了?
这样做的目的是省略复制构造函数,但如果编译器不改变程序的语义,则允许编译器共享内存。
当对象类具有私有副本构造函数时,是否应该允许从函数返回对象?
不,不允许。“应该”很难说,但允许它会让你做各种各样的恶作剧,打破封装。在C++11中,您可以通过在返回中使用{}构造并移动构造该值来做到这一点。
https://stackoverflow.com/questions/10292646
复制相似问题