在标准C++11库中,所有容器都支持移动操作,但如果因此就断言所有的容器的移动都是成本低廉的,就错误了。考虑std::array这个C++11新容器类型,它实质上就是带有STL接的内建数组。
其他标准容器都是將其内容放在堆上的,只需持有一个指涉到存放容器内容的堆内存指针。如如下vector
而std::array缺少这样的指针,因为其内容数据是直接存储在对象内的,如下:
注意:aw1中的元素是被移动入aw2的。无论是移动还是复制std::array类型的对象都还是需要线性时间的计算复杂度,因为容器中的每个元素都必须逐一复制或移动
有以下几个场景,C++11的移动语义不对给你带来什么好处:
- 没有移动操作:待移动的对象未能提供移动操作。因此,移动请求变成了复制请求
- 移动未能更快
- 移动不可用



