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