Скачиваний:
190
Добавлен:
05.07.2021
Размер:
16.53 Mб
Скачать

34. Динамические массивы. Особенности работы с динамическими массивами. Особенности резервирования памяти для массивов. Динамическое резервирование пустого массива. Примеры использования

Синтаксис выделения памяти для массива имеет вид указатель = new тип[размер]. В качестве размера массива может выступать любое целое положительное значение.

int main()

{ int num; // размер массива

cout << "Enter integer value: ";

cin >> num; // получение от пользователя размера массивa

int *p_darr = new int[num]; // Выделение памяти для массива

for (int i = 0; i < num; i++) {

// Заполнение массива и вывод значений его элементов

p_darr[i] = i;

cout << "Value of " << i << " element is " << p_darr[i] << endl;

}

delete [] p_darr; // очистка памяти

return 0;

}

35. Оператор new и динамические массивы. Класс bad_array_new_length. Примеры использования.

Класс описывает исключение, которое указывает, что запрос на выделение не был успешно выполнен из-за того, что размер массива меньше нуля или больше его ограничения.

Синтаксис

class bad_array_new_length : public bad_alloc {

public: bad_array_new_length() noexcept;

const char* what() const noexcept override;

};

Значение, возвращаемое what, является строкой C, определяемой реализацией. Ни одна из функций-членов не создает исключение.

Пример:

int main() {

try {

int* p = new int[-1];

} catch (std::bad_array_new_length& e) {

std::cerr << "bad_array_new_length caught: " << e.what() << '\n';

} catch (std::exception& e) { // older compilers may throw other exceptions:

std::cerr << "some other standard exception caught: " << e.what() << '\n';

}

}

36. Инициализация массива динамически созданных объектов встроенных и пользовательских типов. Примеры использования.

int main()

{ int num; // размер массива

cout << "Enter integer value: ";

cin >> num; // получение от пользователя размера массивa

int *p_darr = new int[num]; // Выделение памяти для массива

for (int i = 0; i < num; i++) {

// Заполнение массива и вывод значений его элементов

p_darr[i] = i;

cout << "Value of " << i << " element is " << p_darr[i] << endl; }

delete [] p_darr; // очистка памяти

return 0;

}

37. Особенности освобождение памяти, выделенной для динамических массивов. Примеры использования.

При применении delete к указателю на массив, пустые [] всегда необходимы, чтобы указать компилятору, что этот указатель содержит адрес только первого элемента массива. Элементы массива всегда удалются в обратном порядке. Чтобы использовать unique_ptr для управления массивом после типа объекта необходимо расположить [].

delete[] p; //р указывает на массив, не забыть использовать delete[]