我无法理解RVO(和NRVO)的定义,因为像我这样的多个问题,假设RVO省略了复制构造函数.现在根据12.8.15
在这种情况下,实现将省略的复制操作的源和目标视为仅仅两种不同的引用同一对象的方式,并且该对象的销毁发生在两个对象被销毁的时间的晚期.优化.
看起来它不是复制构造函数调用被省略,但复制本身 - 只是对象是在第一个位置的"复制"位置构建的,所以没有"原始"对象,根本没有复制.因此,即使一个类有一个private复制构造函数,它也可以在RVO启动时从函数返回,因为没有复制.
我做对了吗?复制本身是省略还是复制构造函数invokation被省略?当对象类有私有拷贝构造函数时,是否应该允许从函数返回一个对象?
例:
A myfunction() { return A(); }
A a = myfunction(); // default ctor only (return value optimization)
a = myfunction(); // default ctor and operator=
Run Code Online (Sandbox Code Playgroud)
为什么编译器不能将新对象写入现有对象?我相信一个类的所有实例占用相同数量的(非动态)内存,所以我不明白为什么这会是一个问题.