- 论坛徽章:
- 0
|
回复 16# hgrany
本质上来说, move ctor就是旧的放弃所有权,新的获得
一般这里必然有个资源转移,说白就是拷贝。move是对返回优化的一个标准加强,而返回优化依赖编译器实现。
让返回必须调用拷贝构造函数变成了调用转移构造,并且不调用临时对象的析构,而之前是必须会被析构,这里就必须去完全的复制拷贝,所以是一个语言级别的bug。move来修正这个。我的描述不清晰你可以去看标准给的表达。
但很多时候事情并不都是那么完美. 这里所说的设计良好,限制还是挺多的
显然是这样,凡事哪有说得那么简单。说的好听,做起来,那还是有些苦头。
那些老代码自然不可能有move ctor了. 这种情况下给新类加move ctor是没有意义的
move语义是给新代码的礼物,也为了让老代码,你说的没有move拷贝那些代码能兼容使用。这没什么问题,库一般会慢慢支持起来,因为move换来的效率还是可观的,关键是他修正了一个bug。我现在更关心的是各个编译器能快些达成一致,把标准完整实现了,这样我才敢用。c++11实现好了,是不是kde桌面会快一些?那个时候gnome咋办
你不可能push_back 一个派生类的实例到存储基类对象的vector中去
为什么不能?这里有个切片。我非要存为什么不可能,尽管这是一个普遍错误的做法。
可能是可能,只是不该这么做。 |
|