当调整std :: vector(通过reserve()或resize())时,默认分配器会做什么?

pyo*_*yon 1 c++ stl

当调整std :: vector(通过reserve()或resize())时,默认分配器会做什么?

  • 内部使用的内存块std::vector实际上已调整大小.

  • 分配新的存储器块,将数据std::move从旧的存储器块移动(例如,d)到新的存储器块,最后解除分配旧的存储器块.

Cor*_*son 5

C++分配器不支持像C这样的东西realloc.每当vector需要更多内存时,它必须分配新存储,从旧移动到新移动,并释放旧存储.

无论哪种方式,realloc都不适合vector.对于典型的分配器,realloc如果缩小其大小,或者在某些情况下仅增加几个字节,则只会为您节省大量复制操作.vector永远不会缩小,它只会以非常大的步伐增长.

请注意,移动支持是C++ 2011中的一种新行为.以前的版本将复制.

  • 矢量不能专门用于使用默认分配器的POD类型的realloc吗? (2认同)