我可以使用 placement new 添加到向量中吗

Can I add to a vector using placement new

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

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

这看起来效率很低,因为创建了一个临时的 MyClass,复制到 vector 中,然后销毁。

有没有什么方法可以使用 placement new 直接在 vector 内部创建 class?我不能这样做:

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

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

否,但您可以使用 emplace_back 就地构建对象:

vec.emplace_back(a,b,c);