创建对象池

Creating an object pool

本文关键字:创建对象      更新时间:2023-10-16

我想使用 X 类型的对象向量创建一个对象布尔值。当我创建矢量时:

vector<X>* v = new vector<X>;
v.reserve(10000);

我希望尽可能少地完成工作。只会调用默认构造函数(X 的默认构造函数为空)吗?

稍后在我的程序中,如何使用对象池"创建"我的对象?会不会是这样的:

int y = get_next_object_in_pool();
X x = v[y];

get_next_object_in_pool()在哪里保留指向向量中下一个自由索引的索引?

不会调用 X 的构造函数,因为 reserve 不会创建任何对象。不要将保留与调整大小混淆,它们做不同的事情。我认为从您描述的其余部分来看,您确实想要保留,但请记住,它将您的向量大小设置为 0。

当您要向池中添加对象时,它类似于

v.push_back(X());

假设您要添加一个默认构造对象。

如果您想完全控制池,以及池中任何已构造和非构造插槽的旧组合。 然后你将不得不做其他事情。你不会得到vector<T>.