Динамические массивы
Кроме отдельных динамических объектов в языке C++ мы можем использовать динамические массивы. Для выделения памяти под динамический массив также используется оператор new, после которого в квадратных скобках указывается, сколько массив будет содержать объектов:
1
int *numbers = new int[4]; // динамический массив из 4 чисел
Причем в этом случае оператор new также возвращает указатель на объект типа int - первый элемент в созданном массиве.
В данном случае определяется массив из четырех элементов типа int, но каждый из них имеет неопределенное значение. Однако мы также можем инициализировать массив значениями:
1
2
3
int *n1 = new int[4]; // каждый элемент имеет неопределенное значение
int *n2 = new int[4](); // каждый элемент имеет значение по умолчанию - 0
int *n3 = new int[4]{ 1, 2, 3, 4 }; // массив состоит из чисел 1, 2, 3, 4
В последнем случае при инициализации массива конкретными значениями следует учитывать, что если значений в фигурных скобках больше чем длина массива, то оператор new потерпит неудачу и не сможет создать массив. Если переданных значений, наоборот, меньше, то элементы, для которых не предоставлены значения, иницилизируются значением по умолчанию.
После создания динамического массива мы сможем с ним работать по полученному указателю, получать и изменять его элементы:
1
2
3
4
5
6
int n = 5; // размер массива
int *p = new int[n]{ 1, 2, 3, 4, 5 };
for (int *q = p; q != p + n; q++)
{
std::cout << *q << "\t";
}
Для удаления динамического массива и освобождения его памяти применяется специальная форма оператора delete:
1
delete [] указатель_на_динамический_массив;
Например:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
int main()
{
int n = 5; // размер массива
int *p = new int[n]{ 1, 2, 3, 4, 5 }; // массив состоит из чисел 1, 2, 3, 4
for (int *q = p; q != p + n; q++)
{
std::cout << *q << "\t";
}
std::cout << std::endl;
delete [] p;
return 0;
}