|
Программирование >> Формирование пользовательского контейнера
bool operator!=(Iter op2) { return ptr != op2.ptr; bool operator<(Iter op2) { return ptr < op2.ptr; bool operator<={Iter op2) { return ptr <= op2.ptr; bool operator>{Iter op2) { return ptr > op2.ptr; bool operator>={Iter op2) { return ptr >= op2.ptr; Вычитает целое значение из Iter. Iter operator-{int n) ( ptr -= n; return *this; Прибавляет целое значение к Iter. Iter operator+(int n) { ptr += n; return *this; Возвращает количество элементов между двумя итераторами Iter, int operator-(Iter<Т> &itr2) { return ptr - itr2.ptr; Этот класс описывает элемент, который хранится Il ъ информационном списке сбора мусора. gnplate <class Т> class GCInfo { public: unsigned refcount; текущий счетчик ссылок Т *memPtr; указатель на вьщеленную память /* isArray равен true если memPtr указывает на размещенный массив. isArray равен false в противном случае. */ bool isArray; true, если указывает на массив /* Если memPtr указывает на размещенный массив, то arraySize содержит размер массива */ unsigned arraySize; размер массива Здесь mPtr указывает на выделенную память. Если это массив, то size задает размер массива. GCInfo(Т *mPtr, unsigned size=0) { refcount = 1; memPtr = mPtr; if(size != 0) isArray = true; else isArray. = false; arraySize = size; Перегрузка операции == позволяет сравнивать объекты GCInfo. Это необходимо для класса list из библиотеки STL. template <class Т> bool operator==(const GCInfo<T> &obl, const GCInfo<T> &ob2) { return (obl.memPtr == ob2.memPtr); Класс GCPtr реализует тип указателя, который применяется при сборе мусора для очистки неиспользуемой памяти, Класс GCPtr должен применяться для указания на память, которая выделена динамически с помощью операции new. Если используется для ссылки на размещенный массив, в параметре size задается размер массива. tenplate <class Т, int size=0> class GCPtr { gclist содержит список сбора мусора, static list<GCInfo<T> > gclist; addr указывает на выделенную память,на которую этот указатель GCPtr в данный момент ссылается, Т *addr; /* isArray равен true если этот указатель GCPtr указывает на размещенный массив, isArray равен false в противном случае. */ bool isArray; true, если указывает на массив Если этот указатель GCPtr ссылается на размещенный массив, arraySize содержит размер массива, unsigned arraySize; размер массива Переменные для поддержки многопоточности. unsigned tid; идентификатор потока static HANDLE hThrd; дескриптор потока static HANDLE hMutex; дескриптор мьютекса static int instcount; счетчик объектов GCPtr Возвращает итератор для указателя на GClnfo в списке gclist. typename list<GCInfo<T> >::iterator findPtrInfo(T *ptr); public: Определяет тип iterator для GCPtr<T>. typedef Iter<T> GCiterator;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |