eHeap object on the heap ” « “

Автор admin Понедельник, 4 мая 2009 11:32

eHeap object on the heap ” « “at address ” « p « endl; return p; } static void operator delete(void* p) { cout « “Deleting TraceHeap object at address ” « p « endl; ::operator delete(p): } TraceHeapCint i) : i(i) {} int getVal0 const { return i: } }: int mainO { auto_ptr pMyObject(new TraceHeap(5)); cout « pMyObject->getValО « endl; // Выводит 5 } ///:- Класс TraceHeap перегружает операторы new и delete, чтобы они выводили полную информацию о происходящих событиях. Как и в любом другом шаблоне, фактический тип указывается в параметре шаблона. Однако мы не используем запись TraceHeap* — объект auto_ptr уже знает, что в нем будет храниться указатель на ваш тип. Вторая строка main() позволяет убедиться в том, что в функции operator->() класса auto_ptr происходит косвенное обращение к исходному низкоуровневому указателю. Еще важнее другое: хотя исходный указатель не удаляется в программе, деструктор pMyObject удаляет его в процессе раскрутки стека, как видно из следующего вывода: Allocating TraceHeap object on the heap at address 8930040 5 Deleting Traceheap object at address 8930040 Шаблон aut


Комментарии закрыты.