С++ - язык, который изучается постепенно.ГЛАВА 16. Шаблон сильного дескриптора
                   Справочники Всё для создания сайта

Ссылки


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







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

Шаблон сильного дескриптора

Шаблон сильного дескриптора идентичен шаблону слабого, за исключением того, что он поддерживает счетчик ссылок для указателя.

template <class Type>

class SH {

private:

BMP<Type>* pointer;

public:

SH() : pointer(new BMP<Type>(new Type)) { pointer->Grab(); }

SH(const SH<Type>& h) : pointer(h.pointer) { pointer->Grab(); }

SH(const WH<Type>& h) : pointer(h.pointer) { pointer->Grab(); }

operator WH<Type>() { return WH<Type>(pointer); }

SH<Type>& operator=(const SH<Type>& h)

{

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

if (pointer == h.pointer) return *this;

pointer->Release();

h.pointer->Grab();

return *this;

}

BMP<Type>& operator->() { return *pointer; }

};

Шаблон используется для обычных переменных (а не для переменных класса), ссылающихся на объекты. Благодаря конструктору, принимающему H<Type>, и операторной функции operator H<Type>() он также может использоваться в операциях присваивания с участием переменных классов, то есть слабых дескрипторов.

class Bar {

private:

WH<Foo> foo;

public:

void f();

};

void Bar::f()

{

SH<Foo> f; // Эквивалентно Foo* f = new Foo;

f = foo; // Использует operator=(SH<Type>(foo));

foo = f; // Использует operator WH<Type>(f);

}


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

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

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