小编ddi*_*git的帖子

c ++垃圾收集和调用析构函数

每帧我需要分配一些需要坚持到框架结束的数据.

目前,我正在从不同的内存池中分配数据,这允许我用帧计数标记它.在帧结束时,我遍历内存池并删除在特定帧中分配的内存.

我遇到的问题是,为了保持数据,我必须将它放在一个结构中:

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为对象调用.

我试图找到使用智能指针模板化对象的方法,但为了做到这一点,我必须将模板化的类重载为非模板化的基类型,这使得删除更加困难.

有没有人能解决这样的问题?

c++ garbage-collection

2
推荐指数
2
解决办法
833
查看次数

标签 统计

c++ ×1

garbage-collection ×1