"因为我如果没这个类的源码,不知道这个类/对象的copy ctor和move ctor的性能开销,只能做一般的假定:move ctor更轻巧一些,性能更好。"
~~~~~~~~~
说的对着呢。这句描述逻辑上可以优化:不知道类源码并不影响,看到头文件有move assign / move ctor,就能用了。——如果move开销更大,那是类作者,实现move的人有问题。比如同事新写的类,算了吧,因为你不知道他是不是真实现对了move,还得帮他review代码。
对于没有move assign / ctor的类,坚决不用move. 编译器实现了没,实现的效果怎么样,不要指望。
对于应用开发者,这条线大概就在,能把STL的类型move用对;极个别重点类,提供move ctor/assign就不错。例子里的move, 我第一遍写肯定不会加move. 除非后面用VTune定位出,这里开销大。
对于库开发者,用什么技巧都行,手写汇编之类,已经不是move的问题了。因为这就是他的业务。
【 在 z16166 的大作中提到: 】
: 之前不会。但是讨论完之后我会,因为copy ctor里有一条较重的指令。
: 原则上只要是后续不再需要的对象,传给别的函数,或者赋值给别的对象,都用std::move。
: 一般我只对比较重/大的对象、没有源码的对象用std::move。这个shared_ptr我知道它里面没几个字段。
: ...................
--
修改:DoorWay FROM 61.185.187.*
FROM 61.185.187.*