對於我的一個類,我正在編寫一個程序,該程序將使用模板化內存池結構來處理類的新實例的分配,同時將它們保持在一起。這是目前聲明如下:作爲朋友功能重載新功能?
template<typename T, unsigned int N>
class MemoryPool
{
//Stuff
};
哪裏T
是類來創建這個池和N
是可以被放置在池中元素的最大數量。我想爲創建的類型重載new
,以使與池的交互更容易一些,如果這是合理的做法 - 但我不確定是否是。
我的想法,目前是,如果有可能超載new
作爲內MemoryPool
朋友功能T
它應該從那裏是可行的,但我不知道。而且,我不確定開始設置的最佳方式。我嘗試了幾種不同的方法來聲明重載的new
,並且在實現它之前我收到了錯誤。
- 這是一個合理的方式來確保
new
被覆蓋的任何類使用MemoryPool
? - 這樣做甚至可能嗎?
- 這樣做甚至是一個好主意嗎?
- 如何設置函數聲明來完成此操作?
如果它的事項,我使用Visual Studio 2010中
注意,具體使用的模板和超載new
是家庭作業的不一部分。這就是我希望如果可能的話實現它,以便將來的任務的其餘部分更易於閱讀。所以,如果沒有合理的方法去做,我只需使用MemoryPool
中的成員函數來實現相同的目標。
謝謝!
實現示例:
MemoryPool<Object, MAX_OBJECTS> objectPool; //Pool to store objects
Object* allObjects[MAX_OBJECTS]; //Locations of objects
//Make a new object (this is how I'd like to do it)
allObjects[0] = new Object(/*args*/);
//(If I can't do the above, this would be the alternative)
allObjects[0] = objectPool.AllocateNewSlot();
allObjects[0]->Initialize(/*args*/);
在這個例子中,使用MemoryPool
的負責實際執行的new
確保對象在池創建的只是堆上的任何地方,而不是(以確保所有對象是在一個集中的,更可控的位置。
我不明白你想要做什麼。你可以添加一個你想如何使用它的例子嗎? – ronag 2010-11-27 20:29:04
@ronag更新了示例實現。這有幫助嗎? – chaosTechnician 2010-11-27 20:39:38