Страница 15 из 40 void GetNextAssoc(POSITION& rNextPosition, KEY& rKey, VALUE& rValue) const; Аргументы "sectiontableheader"rNextPosition - ссылка на величину типа POSITION, возвращенную при предыдущем вызове функцией GetNextAssoc или GetStartPosition. "sectiontableheader"KEY - параметр шаблона, определяющий тип значения ключа. "sectiontableheader"rkey - определяет ключ, по которому осуществляется доступ к элементу. "sectiontableheader"VALUE - определяет тип искомой переменной. "sectiontableheader"rValue - содержит значение искомой переменной. Описание Позволяет получить ключ и элемент карты отображений, расположенные в позиции, определяемой аргументом rNextPosition. После этого производится обновление значения rNextPosition, которое теперь указывает на следующий элемент в карте отображений. При этом последовательность перебора элементов карты отображений не имеет ничего общего с последовательностью ключей. Если получено значение последнего элемента в карте отображений, величина rNextPosition принимает значение NULL. POSITION GetStartPosition() const; Возвращаемое значение Значение типа POSITION, определяющее начальную позицию для поиска по карте отображений, или NULL, если карта пуста. Описание Инициирует процесс поиска по карте отображений, возвращая значение типа POSITION, которое может быть использовано при вызове функции GetNextAssoc. Последовательность просмотра карты отображений непредсказуема, поэтому первый элемент карты ничем особым не отличается от других. BOOL IsEmpty() const; Возвращаемое значение Ненулевое, если карта отображений не содержит элементов, и ноль в противном случае. Описание Использование данной функции позволяет определить, не пуста ли карта отображений. BOOL Lookup(ARG_KEY key, VALUE& rValue) const; Возвращаемое значение Ненулевое, если элемент был найден, и нулевое в противном случае. Аргументы "sectiontableheader"ARG_KEY - параметр шаблона, определяющий тип значения ключа. "sectiontableheader"key - определяет ключ, по которому осуществляется доступ к элементу. "sectiontableheader"VALUE - определяет тип искомой переменной. "sectiontableheader"rValue - содержит значение искомой переменной. Описание Функция Lookup использует хеширование для быстрого поиска элемента карты отображений по заданному ключу. operator [ ] VALUE& operator[](ARG_KEY key); Аргументы "sectiontableheader"VALUE - определяет тип элемента карты отображений. "sectiontableheader"ARG_KEY - параметр шаблона, определяющий тип значения ключа. "sectiontableheader"key - определяет ключ, по которому осуществляется доступ к элементу. Описание Этот оператор может использоваться вместо функции SetAt. Он может использоваться только в левой части оператора присваивания. Если в карте отображений не существует элемента, соответствующего данному ключу, то создается новый элемент. Поскольку нет никакой гарантии, что указанному ключу соответствует элемент в карте отображений, данный оператор не может использоваться в правой части оператора присваивания. Для получения элемента по ключу следует использовать функцию Lookup. BOOL RemoveKey(ARG_KEY key); Возвращаемое значение Ненулевое, если элемент найден и успешно уничтожен, и нулевое в противном случае. Аргументы "sectiontableheader"ARG_KEY - шаблон, определяющий тип ключа. "sectiontableheader"key - ключ удаляемого элемента. Описание Данная функция производит поиск элемента карты отображений, соответствующего заданному ключу, и, в случае успешного завершения поиска, удаляет его. Для удаления элемента используется вспомогательная глобальная функция DestructElements. void RemoveAll(); Описание Данная функция уничтожает все элементы карты отображений, вызывая вспомогательную глобальную функцию DestructElements. Эта функция работает корректно, если карта отображений уже пуста. Класс CMemoryState используется для выявления утечек памяти в приложении. Утечки памяти возникают в тех случаях, когда выделенная под объект область памяти не освобождается после завершения работы с этим объектом. Утечки памяти могут привести к возникновению ошибок при выполнении приложения или к исчерпанию ресурса свободной памяти. Память может выделяться и освобождаться различными способами: "sectiontableheader"с использованием функций malloc и free в библиотеках времени исполнения приложения; "sectiontableheader"с использованием функций Windows API LocalAlloc и LocalFree или GlobalAlloc и GlobalFree; "sectiontableheader"с использованием операций C++ new и delete. Функции класса CMemoryState позволяют обнаруживать только утечки памяти, связанные с использованием операций C++, поскольку программисты Microsoft, очевидно, уверены, что их программы к утечкам памяти никакого отношения иметь не могут. Нам бы их уверенность. Для получения дополнительной информации используется макрос DEBUG_NEW, заменяющий стандартную операцию new ee отладочной версией. Использование этой версии позволяет сохранять информацию о том, в каком файле и в какой его строке был выделен каждый из блоков памяти. Как и любые другие диагностические функции, методы класса CMemoryState работают только в отладочной версии приложения, отличающейся тем, что в ней определена константа _DEBUG. При поиске утечек памяти используются функции Checkpoint, Difference и DumpStatistics, позволяющие выявить различия в состоянии памяти в различных точках приложения. Если информации, полученной при этих сравнениях, окажется недостаточно для выявления источника утечек памяти, для получения дополнительной информации может быть вызвана функция DumpAllObjectsSince, выводящая информацию по всем объектам, память для которых была выделена после последнего вызова функции Checkpoint. Объекты в распечатке будут располагаться в порядке выделения для них оперативной памяти и для каждого из них будет указан файл и строка, в которой произошло выделение памяти, (если в программе использован макрос DEBUG_NEW), происхождение объекта, его адрес и размер. Кроме того, функция DumpAllObjectsSince вызывает для каждого объекта его функцию Dump, выводящую информацию о его текущем состоянии. Объявление объекта типа CMemoryState и вызов его функций должен производиться между директивами #if defined(_DEBUG) и #endif, что обеспечит обращение к ним только в отладочной версии приложения. Описание данной структуры содержится в файле заголовка afx.h. void Checkpoint(); Описание Данная функция позволяет сохранить текущее состояние оперативной памяти и в данном объекте класса CMemoryState. Полученная информация анализируется в функциях Difference и DumpAllObjectsSince. BOOL Difference(const CMemoryState& oldState, const CMemoryState& newState); Возвращаемое значение Ненулевое, если два объекта содержат различную информацию, и нулевое в противном случае. Аргументы "sectiontableheader"oldState - исходное состояние памяти. "sectiontableheader"newState - новое состояние памяти. Описание Данная функция позволяет сравнить два состояния оперативной памяти, сохраненные с использованием функций Checkpoint в своих объектах CMemoryState. void DumpAllObjectsSince() const; Описание Вызывает функцию Dump для всех объектов, производных от класса CObject, память для которых была выделена и не освобождена с момента последнего вызова функции Checkpoint для данного объекта класса CMemoryState. Если для данного объекта функция Checkpoint еще не вызывалась, то в распечатку будут включены все объекты, находящиеся в настоящее время в оперативной памяти. |