Помощь в учёбе, очень быстро...
Работаем вместе до победы

Ссылки и их подсчет

РефератПомощь в написанииУзнать стоимостьмоей работы

Подсчет ссылок основан на простой идее — идет слежка за количеством указателей, ссылающихся на объект. Когда счетчик становится равным 0, объект удаляется. Подсчет ссылок обладает довольно жесткими ограничениями, которые снижают его практическую ценность. Абстрактный базовый класс, от которого можно создать производный класс с подсчетом ссылок. Он содержит переменную, в которой хранится… Читать ещё >

Ссылки и их подсчет (реферат, курсовая, диплом, контрольная)

Ссылка — это псевдоним, который при создании инициализируется именем другого объекта, адресата (target). С этого момента ссылка выступает в роли альтернативного имени адресата, а, следовательно, все, что делается со ссылкой, происходит и с объектом.

Указатели — это переменные, которые содержат адрес другого объекта, а ссылки — это псевдонимы объектов [5].

Подсчет ссылок основан на простой идее — идет слежка за количеством указателей, ссылающихся на объект. Когда счетчик становится равным 0, объект удаляется. Подсчет ссылок обладает довольно жесткими ограничениями, которые снижают его практическую ценность.

Базовый класс с подсчетом ссылок

Абстрактный базовый класс, от которого можно создать производный класс с подсчетом ссылок. Он содержит переменную, в которой хранится количество вызовов функции Grab () за вычетом количества вызовов функции Release (). Создание этого класса в примере 2.19.

Пример 2.19 Создание производного класса с подсчетом ссылок.

class RefCount {.

private:

unsigned long count; // Счетчик ссылок.

public:

RefCount (): count (0) {}.

RefCount (const RefCount&): count (0) {}.

RefCount& operator=(const RefCount&).

{ return *this; } // Не изменяет счетчик.

virtual ~RefCount () {} // Заготовка.

void Grab () { count++; }.

void Release ().

{.

if (count > 0) count —;

if (count == 0) delete this;

}.

};

Каждый раз, когда клиент получает или копирует адрес объекта, производного от RefCount, он вызывает Grab (). Когда клиент гарантирует, что адрес больше не используется, он вызывает Release (). Если счетчик принимает значение 0 — объекта больше нет.

Показать весь текст
Заполнить форму текущей работой