Ответ 1
Контракт с COM - это когда вы передаете объект из такой функции, как CoCreateInstance(), QueryInterface(), которая в конечном итоге вызывает CoCreateInstance() и т.д., вызываемый всегда вызывает AddRef() до Возврат, и вызывающий (вы) всегда Release(), когда вы закончите.
Вы можете использовать CComPtr < > , чтобы сделать это проще, и он просто делает правильные вещи.
Теперь, если вам нужно передать этот указатель другому объекту, который ожидает его использования за время жизни вашего объекта, вам необходимо вызвать AddRef(), прежде чем выдать его.
Я рекомендую Essential COM by Don Box для дальнейшего чтения по этой теме.