Vector push_back移动实现
Vector push_back move implementation
在我的教科书中,vector push_back move的实现是:
void push_back( Object && x )
{
if( theSize == theCapacity )
reserve( 2 * theCapacity + 1 );
objects[ theSize++ ] = std::move( x );
}
我对std::move的理解是,它基本上是静态地将项强制转换为右值引用。那么,当x已经作为右值引用传入时,为什么在最后一行必须使用std::move(x)呢?
x
是右值引用,但您必须遵循的经验法则是:如果它有名称,则它是左值。因此,必须应用std::move
将其类型转换为右值。如果您忽略了std::move
,那么x
将被复制而不是移动到其目的地。
相关文章:
- 运算符+ 的规范实现涉及额外的移动构造函数
- 如何为具有私有成员的派生类实现移动构造函数
- 在一个微不足道的可复制结构中,移动语义应该实现吗?
- std::sort 一个实现了移动构造函数的类
- 有没有办法实现移动消除
- 实现标记联合的移动构造函数
- 将函数及其实现移动到与主文件不同的文件(.hpp 和 .cpp)时,性能会受到很大影响
- 在deque实现中将1/2一个向量移动到另一个向量
- 如何使用继承(抽象基类)实现移动构造函数和移动赋值运算符
- 无法使用迭代器擦除矢量元素,矢量元素实现移动构造函数
- 交换对象不实现移动语义时的交换函数
- 是否可以实现std ::移动和清除功能
- 将执行从一个线程移动到另一个线程,以实现任务并行性并在将来调用
- 复制/移动操作符是否可以安全地用于实现复制/移动分配操作符
- 每次复制实现移动分配的非 const 对象时,我是否总是获得移动语义
- 使用 unique_ptr<> 实现移动构造函数和赋值
- 将类函数实现从 .h 移动到.cpp过程
- 如何实现大型非指针成员的移动构造函数
- 最佳C++移动构造函数实现实践
- Vector push_back移动实现