|
Базовый класс VoidPtr Память под объекты всегда выделяется снизу вверх. Если новые объекты VoidPtr всегда будут добавляться в конец связанного списка, то список всегда будет отсортирован по возрастанию адресов указываемых объектов. Конструкторы (см. далее) напрямую работают с переменной VoidPtrPool::tail. Деструктор исключает экземпляр из списка. Во всем остальном класс VoidPtr остался прежним. Ниже показаны изменения в VoidPtr. class VoidPtr { private: // Новые переменные для ведения списка VoidPtr* next; // Следующий элемент списка VoidPtr* previous; // Предыдущий элемент списка protected: // Изменившиеся конструкторы VoidPtr() : address(NULL), size(0), refcount(0), next(NULL), previous(NULL) {} VoidPtr(void* addr, size_t s) : address(addr), size(s), refcount(0), next(NULL), previous(pool->tail->previous) { pool->tail->next = this; pool->tail = this; } public: // Измененный деструктор virtual ~VoidPtr() { if (size != 0) // Активный указатель - исключить из списка { if (previous != NULL) previous->next = next; if (next != NULL) next->previous = previous; if (pool->tail == this) pool->tail = previous; } size = 0; address = NULL; } }; |
Copyright 2005. Климов Александр. All Right Reserved.