カスタムスタックアロケータでは、を使用してプログラムの起動時に大量のメモリを割り当て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のデストラクタは呼び出されません...
では、デストラクタが確実に呼び出されるようにするには、何を変更できますか?