2013-10-05 55 views
0

我想創建一個對象bool使用類型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()只是不斷的索引向量中的下一個空閒的指數?

+0

需要注意的是,你應該寫'向量 * V =新的向量;'或'矢量 V();' –

+0

此代碼救了我一次年前:對象池的一般C++類(HTTP:// www.codeproject.com/Articles/3968/Object-Pooling-for-Generic-C-classes)當你使用普通的'new'和'delete'操作符從池中獲取對象時,它對你現有的代碼的入侵很少,並且返回他們。 –

+0

@MassoodKhaari謝謝你指出我缺少的指針參考。 – user997112

回答

0

X的構造函數將被調用,因爲保留不會創建任何對象。不要混淆保留和調整大小,他們做不同的事情。我想從你的描述,你確實需要儲備的其餘部分,但要記住它留下您的載體在大小爲0

當你想將一個對象添加到池中它像

v.push_back(X()); 

假設你要添加一個默認的構造對象。

如果您想要完全控制您的游泳池,請使用游泳池中已構建和未構建的老化槽。那麼你將不得不做其他事情。您不會通過vector<T>獲得。

+0

很酷,所以我只是用我的非默認構造函數創建我的X對象,然後push_back在vector上。這將保持我的X對象連續內存? – user997112

+0

@ user997112是的,矢量保證使用連續的內存。 – john