У меня есть встроенный COM-сервер C ++ ATL. Отдельная программа испытаний
- звонки
CoInitialize()
,
- звонки
CoCreateInstance()
, затем
- звонит
Release()
по указателю,
- затем вызывает
CoUnitialize()
и выходит.
Если я запускаю тестовую программу в отладчике Visual C ++, CRT отладки сообщает об одной утечке памяти, и каждый раз номер выделения совпадает.
Я использовал хук выделения и обнаружил, что объект, не возвращаемый в кучу, является объектом фабрики классов.
Итак, в основном происходит следующее:
- программа вызывает
CoCreateInstance()
- COM внутренние звонки
DllGetClassObject()
- ATL создает экземпляр фабрики и передает право собственности вызывающей стороне (внутренним компонентам COM)
и затем фабрика никогда не освобождается - я не вижу достаточно вызовов Release()
фабрики классов.
Что происходит? Это дефект во время выполнения COM?