我可以使用placement new添加到矢量

时间:2017-11-29 21:52:34

标签: c++ performance vector constructor placement-new

我有一个MyClass向量,其中MyClass是一个大类。当我这样做时:

vector<MyClass> vec;
vec.push_back(MyClass(a,b,c));

这似乎效率很低,因为创建了一个临时的MyClass,将其复制到向量中,然后进行了破坏。

首先有一些方法可以使用placement new直接在向量中创建类吗?我不能这样做:

vector<MyClass> vec;
vec.resize(1);
new(&vec.data[0]) MyClass(a,b,c);

因为vec.resize(1)调用了MyClass构造函数。是否有某种方法可以调整向量的大小而不调用所有新项的构造函数,或者是否可以在下一个可用位置将MyClass直接构造到向量中?

1 个答案:

答案 0 :(得分:5)

不,但您可以使用emplace_back来构建对象:

vec.emplace_back(a,b,c);