vector如何复制其数据以便重新分配

How does an std::vector copy its data for reallocation?

本文关键字:分配 新分配 何复制 复制 vector 数据      更新时间:2023-10-16

我编写了一个类似于std::vector的模板数组类,除了它在删除元素时重用空索引或'孔',而不是将所有以下元素移回填充它。

我遇到了一个错误,虽然当我试图存储一个不平凡的对象,因为我使用内存在重新分配期间复制元素。vector是循环遍历它的所有元素并调用复制构造函数,还是使用了我不知道的其他技巧?

是的,复制元素然后销毁原始元素是基本思想。

你可以用模板元编程进行优化,当然:

  • 如果类型有一个简单的复制构造函数,你可以使用memcpy
  • 如果类型有一个简单的析构函数,你可以跳过这一步

c++ 11增加了一个新的维度,你也可以移动对象

不,您不应该对非pod使用memcpy()。经典的c++ 03实现是使用复制构造函数,但这不是很有效。在c++ 11中,您可以使用整个元信息库,例如is_trivially_copyable,在适用时执行memcpy(),检查是否存在move构造函数等。