|
Дескрипторы с подсчетом ссылок На сцену выходит нечто новое: дескриптор (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; } }; Если использовать дескрипторы в сочетании с ведущими указателями, можно выбрать, для каких экземпляров класса следует подсчитывать ссылки, а какие экземпляры должны управляться другим способом. |
Copyright 2005. Климов Александр. All Right Reserved.