Материалы книги получены с http://www.itlibitum.ru/
Базовый класс 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;
}
};
Назад Содержание Далее
|