Создание динамического массива с помощью оператора new
Создать динамический массив в C++ просто. Необходимо указать оператору new тип элементов массива и их количество. В соответствии с требованиями синтаксиса должно быть указано имя типа, а за ним — количество элементов в квадратных скобках.
Например:
// блок из 10 значений типа int
int * psome = new int [10];
Оператор new возвращает адрес первого элемента выделенного блока. В приведенном примере это значение присваивается указателю psome.
При выделении памяти для динамических массивов необходимо следить за индексами при доступе к элементам массива. Нельзя допускать их выход за пределы выделенной памяти.
Общая форма выделения и присвоения области памяти для массива имеет следующий вид:
type_name *pointer_name =
new type_name[num_elements] ;
В результате вызова оператора new резервируется блок памяти, достаточный для хранения элементов num_elements типа type_name, а указатель pointer_name устанавливается на первый элемент блока. Как можно видеть, pointer_name во многих случаях можно использовать как имя массива.
Оператор new позволяет реализовывать механизм запроса необходимого количества памяти в процессе работы программы. Другой стороной данного механизма является оператор delete, который позволяет высвободить запрошенную память ("вернуть" в общую область) после того, как ее использование завершено. Это — важный шаг к наиболее эффективному использованию памяти. Память, которая возвращается, или высвобождается, может быть повторно использована другими модулями программы.
Если для создания массива используется оператор new, следует употребить другую форму оператора delete, которая указывает, что высвобождается именно память, отведенная для массива:
// высвобождается память, отведенная для
// динамического массива
delete [ ] psome;
Квадратные скобки указывают, что необходимо высвободить память, отведенную для целого массива, а не только для элемента, на который указывает указатель.
Кратко перечислим правила, которые необходимо соблюдать при применении операторов new и delete:
ü Не используйте оператор delete для высвобождения памяти, которая не выделялась с помощью оператора new.
ü Не используйте оператор delete для освобождения одного и того же блока памяти два раза подряд.
ü Если для выделения памяти массиву был применен оператор new [ ], следует использовать оператор delete [ ].
ü Если для выделения памяти единственному элементу был применен оператор new, следует использовать оператор delete (без квадратных скобок).
Дата добавления: 2016-04-22; просмотров: 584;