每帧我需要分配一些需要坚持到框架结束的数据.
目前,我正在从不同的内存池中分配数据,这允许我用帧计数标记它.在帧结束时,我遍历内存池并删除在特定帧中分配的内存.
我遇到的问题是,为了保持数据,我必须将它放在一个结构中:
struct FrameMemory
{
uint32 frameIndex;
bool allocatedType; //0 = new(), 1 = new[]
void* pMemPtr;
}
Run Code Online (Sandbox Code Playgroud)
所以后来,当我开始释放内存时,它看起来像这样:
{
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;
}
Run Code Online (Sandbox Code Playgroud)
问题在于,因为我必须将指向内存的指针重载为void*,所以DELETE运算符不能正确地将内存作为其"本机基类型"删除.IE析构函数NEVER为对象调用.
我试图找到使用智能指针模板化对象的方法,但为了做到这一点,我必须将模板化的类重载为非模板化的基类型,这使得删除更加困难.
有没有人能解决这样的问题?