Поделиться через


Подсчет ссылок

Сам COM не пытается автоматически удалить объект из памяти, когда он думает, что объект больше не используется. Вместо этого программист объектов должен удалить неиспользуемый объект. Программист определяет, можно ли удалить объект на основе счетчика ссылок.

COM использует IUnknown методы AddRef и Release для управления числом ссылок интерфейсов в объекте. Общие правила для вызова этих методов:

  • Каждый раз, когда клиент получает указатель интерфейса, AddRef должен вызываться в интерфейсе.

  • Когда клиент завершит работу с указателем интерфейса, он должен вызываться Release.

В простой реализации каждый вызов увеличивается и каждый AddRefRelease вызов уменьшает переменную счетчика внутри объекта. Когда число возвращается к нулю, интерфейс больше не имеет пользователей и может удалить себя из памяти.

Подсчет ссылок также можно реализовать таким образом, чтобы каждая ссылка на объект (не отдельный интерфейс) считалась. В этом случае каждый AddRef и Release вызов делегатов в центральную реализацию объекта и Release освобождает весь объект, когда его число ссылок достигает нуля.

Примечание.

При построении производного CComObjectобъекта с помощью new оператора число ссылок равно 0. Поэтому вызов AddRef должен быть выполнен после успешного создания производного CComObjectобъекта.

См. также

Введение в модель COM
Управление временем существования объектов с помощью подсчета ссылок