Contagem de referênciaReference Counting

O próprio COM não tenta remover automaticamente um objeto da memória quando ele pensa que o objeto não está mais sendo usado.COM itself does not automatically try to remove an object from memory when it thinks the object is no longer being used. Em vez disso, o programador de objetos deve remover o objeto não utilizado.Instead, the object programmer must remove the unused object. O programador determina se um objeto pode ser removido com base em uma contagem de referência.The programmer determines whether an object can be removed based on a reference count.

COM usa os IUnknown métodos, AddRef e Release, para gerenciar a contagem de referência de interfaces em um objeto.COM uses the IUnknown methods, AddRef and Release, to manage the reference count of interfaces on an object. As regras gerais para chamar esses métodos são:The general rules for calling these methods are:

  • Sempre que um cliente recebe um ponteiro de interface, AddRef deve ser chamado na interface.Whenever a client receives an interface pointer, AddRef must be called on the interface.

  • Sempre que o cliente tiver terminado de usar o ponteiro de interface, ele deverá chamar Release .Whenever the client has finished using the interface pointer, it must call Release.

Em uma implementação simples, cada AddRef chamada é incrementada e cada Release chamada diminui uma variável de contador dentro do objeto.In a simple implementation, each AddRef call increments and each Release call decrements a counter variable inside the object. Quando a contagem retorna para zero, a interface não tem mais nenhum usuário e está livre para se remover da memória.When the count returns to zero, the interface no longer has any users and is free to remove itself from memory.

A contagem de referência também pode ser implementada para que cada referência ao objeto (não a uma interface individual) seja contada.Reference counting can also be implemented so that each reference to the object (not to an individual interface) is counted. Nesse caso, cada um AddRef e Release chamar delega para uma implementação central no objeto e Release libera o objeto inteiro quando sua contagem de referência chega a zero.In this case, each AddRef and Release call delegates to a central implementation on the object, and Release frees the entire object when its reference count reaches zero.

Observação

Quando um CComObject objeto derivado é construído usando o new operador, a contagem de referência é 0.When a CComObject-derived object is constructed using the new operator, the reference count is 0. Portanto, uma chamada para AddRef deve ser feita depois de criar com êxito o CComObject objeto derivado.Therefore, a call to AddRef must be made after successfully creating the CComObject-derived object.

Veja tambémSee also

Introdução ao COMIntroduction to COM
Gerenciando tempos de vida de objeto por meio de contagem de referênciaManaging Object Lifetimes through Reference Counting