每幀我需要分配一些需要堅持的數據直到幀結束。C++垃圾收集和調用析構函數
目前,我從一個不同的內存池中分配數據,允許我用幀數對它進行標記。在幀的末尾,我遍歷內存池並刪除在特定幀中分配的內存。
我遇到的問題是,爲了保持保持上的數據,我必須把它正是如此的結構:
struct FrameMemory
{
uint32 frameIndex;
bool allocatedType; //0 = new(), 1 = new[]
void* pMemPtr;
}
所以後來,當我得到周圍的釋放內存,它看起來是這樣的:
{
for(all blocks)
if(block[i].frameIndex == targetIndex)
if(block[i].allocatedType == 0)
delete block[i].pMemPtr;
else if (block[i].allocatedType ==1)
delete[] block[i].pMemPtr;
}
的問題是,因爲我有超載的指針內存作爲一個void *,delete運算符不正確地刪除存儲作爲其本土基地類型。 IE的析構函數從不會被調用該對象。
我試圖找到方法來使用智能指針模板對象的解決方案,但爲了做到這一點,我不得不將模板類重載到非模板化基類型,這使得刪除更多難。
有沒有人有這樣的問題的解決方案?
你能提供一些你的問題背景嗎?你在編寫一個編譯器嗎? 'frame'是什麼意思? – 2010-01-08 15:32:41
按幀我的意思是一個處理框架。就像在遊戲中一樣,或者模擬以每秒30幀的速度運行。 – ddigit 2010-01-08 15:35:38
在垃圾收集器中存儲void *的一個大問題是,當您刪除內存時,您將不會調用該對象的析構函數。你只需要釋放內存。如果對象擁有任何資源(或持有鎖等),則這些資源將泄漏。你需要做一些像月亮暗示的事情。 – 2010-01-08 16:02:24