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

Ссылки


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







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

Ведущие указатели с подсчетом ссылок

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

template <class Type>

class CMP { // "Ведущий указатель с подсчетом ссылок"

private:

Type* pointee;

unsigned long count;

public:

CMP() : pointee(new Type), count(0) {}

CMP(const CMP<Type>& cmp)

: pointee(new Type(*(cmp.pointee))), count(0) {}

~CMP() { delete pointee; } // Независимо от счетчика

CMP<Type>& operator=(const CMP<Type>& cmp)

{

if (this == &cmp) return *this;

delete pointee;

pointee = new Type(*(cmp.pointee));

return *this;

}

Type* operator->() const { return pointee; }

void Grab() { count++; }

void Release()

{

if (count > 0) count--;

if (count <= 0)

{

delete pointee;

delete this;

}

}

};

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


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

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

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