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

1 ... 39 40 41 [ 42 ] 43 44 45 ... 156


11етинг 3.3. Сборщик мусора, выполняющийся как фоновая задача

include <iostreain> #include <list> #include <typeinfo> #include <cstdlib> #include <windows.h> #include <process.h>

iising namespace std;

Для наблюдения за сбором мусора включите DISPLAY. #define DISPLAY

Генерируется исключение при попытке

использовать итератор Iter, выходящий за границы

базового объекта (underlying object).

class OutOfRangeExc {

Добавьте обработку, необходимую вашему приложению.

Генерируется исключение при превышении времени ожидания

исключительного права доступа к hMutex.

class TimeOutExc {

Добавьте обработку, необходимую вашему приложению.

Класс, подобный итератору, для обработки в цикле массивов,

на которые указывгиот объекты GCPtr. Указатели Iter ** не ** участвуют в сборе мусора и не влияют на него. Таким образом, указание с помощью Iter на какой-либо объект не препятствует удалению этого объекта из памяти.

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

в листинге 3.3 приведена полностью многопоточная версия сборщика мусора. Назовите этот файл gcthrd.h.



tenplate <class Т> class Iter {

T *ptr; текущее значение указателя

Т *end; указатель на элемент, следующий за последним Т *begin; указьшает на первый элемент размещенного массива unsigned length; длина последовательности (массива) public:

Iter О {

ptr = end = begin = NULL; length =0;

Iter(T p, T *first, T *last) { ptr = p; end = last; begin - first; length = last - first;

Возвращает длину последовательности, на которую этот указатель Iter ссылается, unsigned sizeO return length; }

Возвращает значение, на которое указьшает ptr. Не допускает обращения за границы. Т &operator*() {

if( (ptr >= end) II (ptr < begin) ) throw OutOfRangeExc();

return *ptr;

Возвращает адрес, содержащийся в ptr. Не допускает обращения за границы. Т *operator->() {

if( (ptr >= end) II (ptr < begin) ) throw OutOfRangeExc();

return ptr;



fQlnOr04H0CTb

префикс ++. Iter cperator++() { ptr++;

return *this;

Префикс -. Iter operator-() { ptr-;

return *this;

Постфикс ++.

Iter operator++{int notused) { T *tnp = ptr; ptr++;

return Iter<T>{tnp, begin, end);

Постфикс -.

Iter operator-(int notused) { T *tnp = ptr; ptr-;

return Iter<T>(titp, begin, end);

Возвращает ссыпку на объект с заданным индексом. Не допускает обращения за границы. Т &operator[](int i) {

if( (i < 0) II (i >= (end-begin)) ) throw OutOfRangeExc();

return ptr[i];

Определяет операции отношения, bool operator==(Iter op2) { return ptr == op2.ptr;



1 ... 39 40 41 [ 42 ] 43 44 45 ... 156

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