В моем драйвере UMDF
я есть IWDFMemory
упакованы внутри CComPtr
Окна УФСТ CComPtr IWDFMemory не получает освобожденный
CComPtr<IWDFMemory> memory;
Документация CComPtr
говорит, Если CComPtr
объект выходит из области видимости, он получает автоматически освобождается. Это означает, что этот код не должен создавать никаких утечек памяти:
void main()
{
CComPtr<IWDFDriver> driver = /*driver*/;
/*
driver initialisation
*/
{
// new scope starts here
CComPtr<IWDFMemory> memory = NULL;
driver->CreateWdfMemory(0x1000000, NULL, NULL, &memory);
// At this point 16MB memory have been allocated.
// I can verify this by the task manager.
// scope ends here
}
// If I understand right the memory I allocated in previous scope should already
// be freed at this point. But in the task manager I still can see the 16 MB
// memory used by the process.
}
Кроме того, если я вручную назначить NULL
на memory
или позвоните memory.Release()
до того объема закончить память не получает свободу. Мне интересно, что здесь происходит?
Итак, что является хорошей практикой для этого примера? Я хочу, чтобы память была освобождена в конце области. Что я должен выбрать в качестве родительского объекта, если не сам драйвер? – arminb
Я не знаком с UMDF, но я посмотрел, как используется «IWDFDriver :: CreateWDFMemory», а в тех местах, где задан непустой владелец, типичным владельцем является объект «IWDFIoRequest». –