Программирование >>  Формирование пользовательского контейнера 

1 ... 6 7 8 [ 9 ] 10 11 12 ... 156


II Если этот GCPtr указывает на размещенный динамически массив, arraySize содержит размер массива, unsigned arraySize; размер массива

static bool first; Равен true, когда создается первый GCPtr.

Возвращает iterator для указателя info в списке gclist. typename list<GCInfo<T> >::iterator findPtrInfo(T *ptr);

public:

Определяет тип итератора для GCPtr<T>. typedef Iter<T> GCiterator;

Конструктор для инициализированных и неинициализированных

объектов.

GCPtr(Т *t=NULL) {

Регистрирует shutdovmO как функцию завершения, if(first) atexit(shutdown); first = false;

list<GCInfo<T> >::iterator p;

p = findPtrlnfo(t);

Если t уже есть в списке gclist,

увеличивает его счетчик ссылок.

В противном случае добавляет его в список.

if(p != gclist.endO )

p->refcovint++; увеличение счетчика ссылок else (

Создает и запоминает новый элемент. GCInfo<T> gcObj(t. size); gclist.push front(gcObj);

addr = t;

arraySize = size;

if(size > 0) isArray = true;



else isArray = false; #ifdef DISPLAY

cout Constructing GCPtr. ; if(isArray)

cout Size is arraySize endl; else

cout endl; #endif

Копирующий конструктор. GCPtr(const GCPtr &ob) {

list<GCInfo<T> >::iterator p;

p = findPtrlnfo(ob.addr);

p->refcovint++; увеличивает счетчик ссылок на единицу

addr = Ob.addr;

arraySize - ob.arraySize;

if(arraySize > 0) isArray = true;

else isArray = false;

#ifdef DISPLAY

cout Constructing copy. ;

if(isArray)

cout Size is arraySize endl;

else

cout endl; #endif

Деструктор для GCPTr. -GCPtrO;

Собирает ьсор. Возвращает true, если хотя бы один объект был удален, static bool collect О;

Перегружает присваивание указателя GCPtr. Т *pperator=(T *t);



II Перегружает присваивание одного GCPtr другому GCPtr. GCPtr &operator=(GCPtr &rv);

Возвращает ссылку на объект, на который указывает этот GCPtr. Т &operator*() { return *addr;

Возвращает адрес, на который указывает. Т *operator->() { return addr;}

Возвращает ссылку на объект lie индексом, заданным i. Т &operator[](int i) { return addr[i];

Функция преобразования для Т *. operator Т *() { return addr; }

Возвращает Iter для начала выделенной памяти. Iter<T> beginO { int size;

if(isArray) size = arraySize; else size = 1;

return Iter<T>(addr, addr, addr + size);

Возвращает Iter для элемента, следукщего за последним элементом распределенного в памяти массива. lter<T> endО { int size;

if(isArray) size = arraySize; else size = 1;



1 ... 6 7 8 [ 9 ] 10 11 12 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика