哪个C++对象复制得更快?

ala*_*ere -1 c++ performance stdvector

存在此C++对象的两个实例.

my_type
{
    public:
        std::vector<unsigned short> a;
}
Run Code Online (Sandbox Code Playgroud)

std :: vector为空,另一个包含50个元素.

哪个实例复制最快或者同时复制?

Dar*_*rda 10

std::vector复制a时,它的所有元素也被复制 - 因此所用的时间应该与之成比例vector.size().

c++0x所谓的移动语义中引入,允许为类型定义移动构造函数和移动赋值运算符.这些为标准库容器(例如std::vector)定义的,应该允许向量移动O(1).如果您担心性能,也许您可​​以重新投射操作以利用这些新功能.

编辑:根据链接的问题,如果您担心在调用时可能vector::push_back会有额外的副本,您有几个选项:

  1. c++0x使用新的vector::emplace_back而不是.这允许您的对象在容器中就地构造.
  2. c++0x使用移动语义,通过类似的东西vector.push_back(std::move(object_to_push)).对于POD类型,这仍然会比emplace_back选项进行更多的复制.
  3. 存储指向对象的容器而不是对象本身.在这种情况下,容器将唯一复制的是指针本身 - 这很便宜.您可能希望使用此选项的某些智能指针变体.

希望这可以帮助.