Подтвердить что ты не робот

В COM: следует ли мнезывать AddRef после CoCreateInstance?

Содержит ли CoCreateInstance автоматически AddRef для интерфейса, который я создаю, или я должен его вручную называть вручную?

4b9b3361

Ответ 1

Контракт с COM - это когда вы передаете объект из такой функции, как CoCreateInstance(), QueryInterface(), которая в конечном итоге вызывает CoCreateInstance() и т.д., вызываемый всегда вызывает AddRef() до Возврат, и вызывающий (вы) всегда Release(), когда вы закончите.

Вы можете использовать CComPtr < > , чтобы сделать это проще, и он просто делает правильные вещи.

Теперь, если вам нужно передать этот указатель другому объекту, который ожидает его использования за время жизни вашего объекта, вам необходимо вызвать AddRef(), прежде чем выдать его.

Я рекомендую Essential COM by Don Box для дальнейшего чтения по этой теме.

Ответ 2

Короче: Нет.

Вам не нужно вызывать AddRef в вашем коде.

Ссылочный счетчик, для которого COM-объект имеет значение 1 после CoCreateInstance.

Итак, если вы вызываете Release, счетчиком ссылок будет 0, а объект COM будет удален.

Ответ 3

Одно исключение из правила: CComObject < > :: CreateInstance() НЕ выполняет AddRef. Вы должны сделать это после того, как позвоните.