Материалы книги получены с http://www.itlibitum.ru/
Дескрипторы с подсчетом ссылок
На сцену выходит нечто новое: дескриптор (handle) с подсчетом ссылок. По отношению к шаблону CMP он станет тем же, чем CP был для RefCount, - то есть он автоматически вызывает функции Grab() и Release() в своих конструкторах, деструкторе и операторе =.
template <class Type>
class CH { // "Дескриптор с подсчетом ссылок"
private:
CMP<Type>* pointee;
public:
CH(CMP<Type>* p) : pointee(p) { pointee->Grab(); }
CH(const CH<Type>& ch) : pointee(ch.pointee) { pointee->Grab(); }
~CH() { pointee->Release(); }
CH<Type>& operator=(const CH<Type>& ch)
{
if (this == &ch) return *this;
if (pointee == ch.pointee) return *this;
pointee->Release();
pointee = ch.pointee;
pointee->Grab();
return *this;
}
CMP<Type> operator->() { return *pointee; }
};
Если использовать дескрипторы в сочетании с ведущими указателями, можно выбрать, для каких экземпляров класса следует подсчитывать ссылки, а какие экземпляры должны управляться другим способом.
Назад Содержание Далее
|