Подсчет ссылок
Сам COM не пытается автоматически удалить объект из памяти, когда он думает, что объект больше не используется. Вместо этого программист объектов должен удалить неиспользуемый объект. Программист определяет, можно ли удалить объект на основе счетчика ссылок.
COM использует IUnknown
методы AddRef и Release для управления числом ссылок интерфейсов в объекте. Общие правила для вызова этих методов:
Каждый раз, когда клиент получает указатель интерфейса,
AddRef
должен вызываться в интерфейсе.Когда клиент завершит работу с указателем интерфейса, он должен вызываться
Release
.
В простой реализации каждый вызов увеличивается и каждый AddRef
Release
вызов уменьшает переменную счетчика внутри объекта. Когда число возвращается к нулю, интерфейс больше не имеет пользователей и может удалить себя из памяти.
Подсчет ссылок также можно реализовать таким образом, чтобы каждая ссылка на объект (не отдельный интерфейс) считалась. В этом случае каждый AddRef
и Release
вызов делегатов в центральную реализацию объекта и Release
освобождает весь объект, когда его число ссылок достигает нуля.
Примечание.
При построении производного CComObject
объекта с помощью new
оператора число ссылок равно 0. Поэтому вызов AddRef
должен быть выполнен после успешного создания производного CComObject
объекта.
См. также
Введение в модель COM
Управление временем существования объектов с помощью подсчета ссылок