每帧我需要分配一些需要坚持的数据直到帧结束。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