Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 3.2 (ч.1). Команды и данные. Абстракция да...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
624 Кб
Скачать
☆

3.2.2.9.2 Динамическое освобождение памяти от хранимых данных

Память, выделенную для хранения данных динамически, нужно освобождать, когда отпадает необходимость в размещенных в ней данных. В противном случае происходит неоправданная «утечка памяти».

Для указателей на скаляры это делается с помощью инструкции delete следующего вида:

инструкция освобождения памяти от скаляров ::=

delete, указатель, {«,», указатель }, «;»;

Инструкция delete хоть и освобождает часть оперативной памяти из «кучи» от ранее размещенного данного, но не обнуляет указатель на эту память. Во избежание ситуаций обращения по указателю на уже не существующие данные, рекомендуется дополнительно присваивать такому указателю значение NULL, например, так:

delete X;

X = NULL;

Для указателей на векторы память освобождается с помощью инструкции delete следующего вида:

инструкция освобождения памяти от векторов ::=

delete, «[ ]», указатель, {«,», указатель }, «;»;

Пример:

delete [ ] X, Y; // освобождение памяти от массивов X и Y

X = Y = NULL;

3.2.2.9.3 Ссылка

Ссылкой называется идентифицированный скалярный указатель, используемый для косвенного обращения к данному по его дополнительному имени (псевдониму).

Перед использованием в программе ссылка должна быть объявлена согласно правилу:

объявление ссылки ::=

тип данного, &, идентификатор ссылки, [ =, идентификатор данного ], «;»;

Ссылка инициализируется адресом некоторого данного, причём значение ссылки после ее инициализации изменять нельзя. Например:

int T; // объявление переменной T

int &RefT = T; // объявление и инициализация ссылки переменной T

Если ссылка инициализируется постоянной, то автоматически создается объект типа тип данного с именем идентификатор ссылки, который затем инициа­ли­­зируется постоянной. Например:

// объявление и инициализация ссылки RefConst значением постоянной 5

int &RefConst = 5;

3.2.2.10 Множества

Множеством называется идентифицированный вектор неупорядоченных однотипных данных (элементов).

Множество в языке С++ описывается в соответствии с правилами:

тип множества ::= char | int | перечисление;

Set, <, тип множества «,», минимальное значение (0) «,»,

максимальное значение( 0 и 255), >, идентификатор, { идентификатор }, «;»;

Множество может быть пустым (т.е. может не содержать элементов) и не может содержать двух одинаковых элементов.

Следующий пример иллюстрирует объявление пользовательского типа данных LowerCaseSet, соответствующего множеству строчных латинских букв, и данного X этого типа:

typedef Set <char, ‘a’, ‘z’> LowerCaseSet;

LowerCaseSet X;

Следующий пример иллюстрирует объявление множества MyColors, элементы которого являются к тому же элементами перечисления:

enum Colors { white, blue, red, yellow, green };

Colors Palette1;

Set <Colors, Palette1.white, Palette1.green> MyColors;

Над множествами можно выполнять такие же действия, как и в математике::

Set1 >> el; // удаление элемента el из множества Set1

Set1 << el; // добавление элемента el во множество Set1

Set1 = Set2 + Set3; // объединение множеств Set2 и Set3 во множество Set1

Set1 = Set2 - Set3; // разность множеств

Set1 = Set2 * Set3; // пересечение множеств

Также есть логический метод, позволяющий узнать, есть ли элемент во множестве:

 

bool __fastcall Contains(const T el) const;