Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭКЗ_2020_ООП.odt
Скачиваний:
23
Добавлен:
23.06.2020
Размер:
217.5 Кб
Скачать

46. Зачем нужен виртуальный деструктор?

Виртуальный деструктор необходим для корректного удаления памяти объекта наследника через указатель на базовый класс. Если деструктор в базовом классе объявлен как виртуальный, то при удалении объекта наследника через указатель на базовый класс вызовется сначала деструктор наследника, а потом деструктор базового класса. Иначе, вызовется деструктор только базового класса.

47. Как осуществляется работа с динамической памятью в С/С++?

В Си работать с динамической памятью можно при помощи соответствующих функций распределения памяти (calloc, malloc, free), для чего необходимо подключить библиотеку malloc.h С++ использует новые методы работы с динамической памятью при помощи операторов new и delete:

  • new — для выделения памяти;

  • delete — для освобождения памяти.

Результатом выполнения операции new будет указатель на отведенную память, или нулевой указатель в случае ошибки.

Память, отведенная в результате выполнения new, будет считаться распределенной до тех пор, пока не будет выполнена операция delete. Освобождение памяти связано с тем, как выделялась память – для одного элемента или для нескольких. В соответствии с этим существует и две формы применения delete:

delete и delete[].

48. В чем различие delete и delete[]?

delete явно указывает на удаление указателя, а delete[] явно указывает на удаление массива указателей.

49. Что подразумевается под идиомой raii?

Resource Acquisition Is Initialization - получение ресурса есть инициализация

• Основная идея - с помощью механизмов языка получение ресурса

неразрывно совмещается с инициализацией , а освобождение - с

уничтожением объекта

• Типичный способ реализации - получение доступа в конструкторе, а

освобождение в деструкторе

• Применяется для:

• Выделения памяти

• Открытия файлов / устройств / каналов

50. Перечислите основные подходы к обработке ошибок.

1. Остановка программы

2. Возврат кода ошибки из вызванного метода

3. Сообщение об ошибке через внешнюю переменную – errno

4. Использование функций-обработчиков

51. Для чего предназначен механизм обработки исключительных ситуаций?

1. Альтернатива традиционным техникам обработки ошибок

2. Позволяет программистам разделить код на:

Реализующий естественное поведение программы

Обрабатывающий исключительные ситуации

3. Предоставляет единый стиль обработки ошибок

52. Что такое исключение?

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

Это некое действие, которое вступает в силу, при наступлении нестандартной ситуации.

Исключением может быть:

  1. событие;

  2. ситуация;

  3. объект;

  4. ошибка в программе;

  5. прерывание;

------------------------------------------------------------------------------------------------------------------------

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

Предназначены для доставки информации из точки, где обнаружена ошибка в точку, где она может быть обработана.

53. Какие типы данных допустимы для использования в качестве объектов exception?Объекты исключений могут быть любого типа, допускающего копирование.

Строго рекомендуется использовать специально разработанные типы для объектов, которые «бросаются» в исключительных ситуациях. Это минимизирует шансы на пересечение с другими типами ошибок от сторонних компонентов программы.