С++ - язык, который изучается постепенно.ГЛАВА 14. Базовый класс с подсчетом ссылок
                   Справочники Всё для создания сайта

Ссылки


Home
Бизнес
Справочники
Советы







Материалы книги получены с http://www.itlibitum.ru/

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

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

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;

}

};

Пока клиентский код правильно вызывает функции Grab() и Release(), все работает абсолютно надежно. Каждый раз, когда клиент получает или копирует адрес объекта, производного от RefCount, он вызывает Grab(). Когда клиент гарантирует, что адрес больше не используется, он вызывает Release(). Если счетчик падает до 0 - бац! Нет больше объекта! Недостаток такой методики очевиден - она слишком полагается на соблюдение всех правил программистом. Можно сделать получше.


Назад    Содержание    Далее    

Home  Создание сайтов  Учебник по записи CD  Справочник Web дизайнера Самоучитель IE PHP и MySQL Компьютерные сети С++ E-mail me

Copyright 2007. Климов Александр. All Right Reserved.
Hosted by uCoz