Compartilhar via


Classe CComObjectRootEx

Essa classe fornece métodos para manipular o gerenciamento de contagem de referência de objetos para objetos nonaggregated e agregados.

template<
   class ThreadModel 
>
class CComObjectRootEx : public CComObjectRootBase

Parâmetros

Comentários

CComObjectRootEx lida com gerenciamento de contagem de referência de objetos para objetos nonaggregated e agregados. Ele armazena a contagem de referência de objeto se o objeto não está sendo agregado e mantém o ponteiro para desconhecido externo se seu objeto está sendo agregado.Para objetos agregados, CComObjectRootEx métodos podem ser usados para manipular a falha do objeto interno para construir e proteger o objeto externo da exclusão quando interfaces internas são liberados ou o objeto interno é excluído.

Uma classe que implementa um servidor COM deve herdar da CComObjectRootEx ou CComObjectRoot.

Se sua definição de classe especifica o DECLARE_POLY_AGGREGATABLE macro, o ATL cria uma instância de CComPolyObject <cyourclass> when IClassFactory::CreateInstance é chamado.Durante a criação, o valor do externo desconhecido é verificado.Se for NULO, IUnknown é implementado para um objeto nonaggregated.Se desconhecido externo não for NULO, IUnknown é implementado para um objeto agregado.

Se sua classe não especificar o DECLARE_POLY_AGGREGATABLE macro, o ATL cria uma instância de CAggComObject <cyourclass> para objetos agregados ou uma instância de CComObject <cyourclass> nonaggregated objetos.

A vantagem de usar CComPolyObject é evitar ter que ambos CComAggObject e CComObject no módulo para lidar com casos nonaggregated e agregados. Um único CComPolyObject objeto lida com ambos os casos. Portanto, somente uma cópia do vtable e uma cópia das funções existir no seu módulo.Se seu vtable for grande, isso pode diminuir substancialmente o dimensionar do módulo.No entanto, se seu vtable for pequeno, usando CComPolyObject pode resultar em um dimensionar ligeiramente maior do módulo porque ele não é otimizado para um objeto agregado ou nonaggregated, assim sistema autônomo CComAggObject e CComObject.

Se o objeto é agregado, IUnknown é implementada por CComAggObject ou CComPolyObject. Essas classes delegado QueryInterface, AddRef, e Versão calls to CComObjectRootEx's OuterQueryInterface, OuterAddRef, e OuterRelease para encaminhar a externo desconhecido. Normalmente, substituir CComObjectRootEx::FinalConstruct na sua classe para criar todos os objetos agregados e substituir CComObjectRootEx::FinalRelease Para liberar todos os objetos agregados.

Se o objeto não está agregado, IUnknown é implementada por CComObject ou CComPolyObject. Nesse caso, chamadas de QueryInterface, AddRef, e Versão delegadas para CComObjectRootEx's InternalQueryInterface, InternalAddRef, e InternalRelease para executar as operações real.

Requisitos

Cabeçalho: atlcom.h

Consulte também

Referência

Classe CComAggObject

Classe CComObject

Classe CComPolyObject

Outros recursos

CComObjectRootEx membros

Visão geral do ATL classe