Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Выделение памяти без возбуждения исключения
В ранних версиях C++ при нехватке памяти возвращался нулевой указатель. Такая же ситуация возникает в языке C при использовании функции malloc()
. Чтобы оператор new
, возвращал нулевой указатель, а не возбуждал исключение используется следующий синтаксис:
<Указатель> = new (std::nothrow) <Тип данных>(<Начальное значение>);
<Указатель> = new (std::nothrow) <Тип данных>[<Количество элементов>];
Для использования nothrow
требуется подключить файл new
. После выделения памяти следует проверить указатель на отсутствие нулевого значения. Пример выделения памяти без возбуждения исключения приведен в листинге 3.16.
Листинг 3.16. Динамическое выделение памяти без возбуждения исключения
#include <iostream>
#include <new>
#include <clocale>
#include <process.h>
int main() {
std::setlocale(LC_ALL, "Russian_Russia.1251");
int *p = new (std::nothrow) int; // Выделяем память
if (!p) { // Проверяем на корректность
std::cerr << "Не удалось выделить память" << std::endl;
exit(1); // Выходим при ошибке
}
*p = 20; // Пользуемся памятью
std::cout << *p << std::endl; // 20
delete p; // Освобождаем память
p = nullptr; // Обнуляем указатель
return 0;
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов