在我的自定义堆栈分配器中,我在程序启动时使用 分配大量内存malloc()
,然后在程序关闭时free()
分配所有内存。
所以基本上它看起来像这样:
//start up
m_pInitialPosition = malloc(STACK_SIZE);
//shutdown
free(m_pInitilaPosition);
当我需要创建一个新对象时,我调用allocateNew()
:
Actor* pActor = getStackAllocator().allocateNew<Actor>();
*pActor = Actor();
这allocateNew()
看起来像:
template <class T>
T* allocateNew()
{
//allocate returns void*
return new (allocate(sizeof(T), __alignof(T))) T;
}
如果我打电话,就会出现问题(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse 异常):
delete pActor;
如果我只是删除该行,问题就会消失并且没有内存泄漏,因为我仍然free()
在堆栈分配器中调用,但没有调用 Actor 的析构函数......
那么我可以改变什么来确保调用析构函数呢?