Visual C++. Описание стандартных классов - CObArray

ОГЛАВЛЕНИЕ


CObArray

Класс CObArray представляет собой класс массива указателей на объект класса CObject. Этот массив объектов аналогичен массивам языка C, но способен динамически изменять свой размер. Индекс первого элемента массива всегда равен 0. Пользователь может зафиксировать верхнюю границу массива или позволить ему расти при добавлении новых элементов, если их индекс превышает его верхнюю границу. Для данного массива всегда выделяется единая область памяти, даже в том случае, когда отдельные его элементы не используются. При использовании Win32 размер объекта класса CObArray определяется только доступной областью памяти. Как и в случае массивов языка C, время доступа к любому элементу массива CObArray постоянно и не зависит от размера массива. Класс CObArray включает в себя макрос IMPLEMENT_SERIAL, позволяющий работать с архивом и выводить диагностические сообщения. Если массив указателей на объекты класса CObject сохраняется в архиве, независимо от того используется ли для этого перегруженный оператор << или функция Serialize, то в архиве сохраняется каждый объект класса CObject, для чего вызывается его собственная функция Serialize, и его индекс в массиве. При необходимости вывести диагностическую информацию об отдельном объекте класса CObject, хранящегося в массиве, необходимо указать глубину объекта CDumpContext равной 1 или большей величине. При уничтожении объекта класса CObArray или при удалении из него элементов уничтожаются только указатели на объекты класса CObject, а не сами объекты, на которые ссылаются данные указатели. Прежде чем использовать массив, необходимо вызвать функцию SetSize для установки его размера и резервирования необходимой памяти. Если при создании массива не использовалась функция SetSize, то при добавлении в него элементов часто будет производиться перераспределение памяти и копирование массива, что может привести к замедлению работы программы и к фрагментации памяти. Для работы с архивом необходимо использовать макрос IMPLEMENT_SERIAL для данного класса. Описание данного класса содержится в файле заголовка afxcoll.h.