내 할당 된 새 연산자를 사용하지 않고 내 메모리 디버깅 유틸리티 내에서 STL 컨테이너에서 사용할 사용자 지정 할당자를 구현했습니다. 메모리 디버거에서 동일한 할당 자 클래스의 인스턴스를 사용하여 '정상'메모리 할당을 추적하는 데 필요한 객체를 할당합니다. 그것은 모두 잘 작동하지만 allocator 인터페이스를 사용하는 방식이 올바른지 확실하지 않습니다. 여기 (항목이 곧 추가 될 예정에 대한 올바른 초기화 매개 변수)가 현재 서 같은 유틸리티 방법이 있습니다 : 이것은 단지 매우 지저분한 것할당자를 사용하여 객체를 인스턴스화하는 올바른 방법은 무엇입니까?
iidebug::CMemoryDebugger::CEntry* iidebug::CMemoryDebugger::NewEntry()
{
CEntry* pEntry = m_entryAllocator.allocate(1);
if (0 != pEntry)
{
new(pEntry) CEntry(0, 0, __FILE__, 0, 0, 0);
}
return pEntry;
}
void iidebug::CMemoryDebugger::DeleteEntry(iidebug::CMemoryDebugger::CEntry* pEntry)
{
if (0 != pEntry)
{
destruct(pEntry);
m_entryAllocator.deallocate(pEntry, 1);
}
}
은,하지만 난 그것을 개선 할 수있는 방법을 볼 수 없습니다.
그게 훨씬 깔끔한 옵션, 덕분에 스택 :) – FlintZA
내가 좋아하는 일은 또한 모든 할당 할당의 머리 부분에 함수 포인터가 있어야합니다 (32 비트 x86 응용 프로그램에서 작업하는 경우 여분의 4 바이트를 추가해야 함).이 함수는 dealloc 함수를 가리 킵니다. 기억을 먹었다. 그런 다음 객체를 삭제하면 (기본 객체 인 delete 연산자를 통해 모든 객체를 삭제할 수 있음) 해당 함수 포인터를 호출하기 만하면됩니다. –
흥미로운 아이디어는 메모리 디버깅을위한 것입니까? 기본 new에 있고 동일한 함수 포인터가 항상 전달되는 경우 각 포인터에서 여분의 4 바이트를 사용하는 대신 재정의 된 delete에서 명시 적으로 함수를 명시 적으로 호출하지 않는 이유는 무엇입니까? – FlintZA