创建对象池

时间:2013-10-05 12:22:25

标签: c++ performance memory-management vector object-pooling

我想使用X对象的向量创建一个对象bool。当我创建矢量时:

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()只保留向量中下一个自由索引的索引吗?

1 个答案:

答案 0 :(得分:0)

不会调用X的构造函数,因为reserve不会创建任何对象。不要将保留与调整大小混淆,他们会做不同的事情。我想从你的描述的其余部分你想要保留,但记住它会使你的矢量大小为0。

如果要将对象添加到池中,则类似

v.push_back(X());

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

如果您希望完全控制游泳池,则可以使用游泳池中任何旧构造和非构造插槽的混合。然后你将不得不做别的事情。你不会用vector<T>来获得它。