首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当RVO/NRVO启动时,对象是否被复制?

当RVO/NRVO启动时,对象是否被复制?
EN

Stack Overflow用户
提问于 2012-04-24 06:16:06
回答 6查看 444关注 0票数 5

我无法理解RVO (和NRVO)的定义,因为就像这个存在多个问题,在我看来,这些问题假设RVO忽略了一个复制构造函数。现在根据12.8.15

在这种情况下,实现将省略复制操作的源和目标视为引用同一对象的两种不同方式,并且该对象的销毁发生在如果不进行优化就会销毁这两个对象的后期。

它看起来不是复制构造函数调用被省略了,而是复制本身--只是对象首先是在“复制”位置构造的,所以根本没有“原始”对象,也没有复制。因此,即使一个类有一个private副本构造函数,它也可以在RVO启动时从函数返回,因为没有副本。

我做得对吗?复制本身是省略了还是复制构造函数调用省略了?当对象类具有私有副本构造函数时,是否应该允许从函数返回对象?

EN

Stack Overflow用户

发布于 2012-04-24 06:34:57

复制本身是省略了还是复制构造函数调用省略了?

这样做的目的是省略复制构造函数,但如果编译器不改变程序的语义,则允许编译器共享内存。

当对象类具有私有副本构造函数时,是否应该允许从函数返回对象?

不,不允许。“应该”很难说,但允许它会让你做各种各样的恶作剧,打破封装。在C++11中,您可以通过在返回中使用{}构造并移动构造该值来做到这一点。

票数 1
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10292646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档