|
6驿站币
本帖最后由 Jeff_ 于 2018-11-19 21:05 编辑
这里Useless four(one + three); 调用移动构造,我自己运行了下,是先进行+法的重载,可是加法的重载还是创建了临时对象temp,然后返回temp时调用移动构造。
问题: 1.移动构造的好处不就是可以省去中间临时对象的复制与析构吗,那这里同样创建了中间临时对象的意义是什么?
2.既然这里中间已经创建了临时对象,这个临时对象不是应该调用的复制构造吗?为什么这个temp对象还是会继续调用移动构造? |
最佳答案
查看完整内容
1、移动构造的好处确实是省去中间临时对象的再次创建,但是 Useless four(one + three); 创建的临时对象跟移动构造没有关系,而是调用 Useless operator+(const Useless & f) const; 函数创建的,因为其返回值就是个新的对象,所以肯定会创建个临时对象;
2、因为第一步创建的是一个临时对象,所以才会调用移动构造,如果不是一个临时对象可能就直接调用拷贝构造了,明白了吗?
具体可以看看这篇文章,感觉讲解的挺好!
C ...
上一篇: ListCtrl.SetItemText多进程中不能立即显示,需要整个程序运行完毕才显示下一篇: c++应用层实现文件的跟踪与修改
|