Министерство цифровых информационных технологий и коммуникаций республики узбекистан каршинский филиал ташкентского университета информационных технологий


Download 98.86 Kb.
bet1/11
Sana18.11.2023
Hajmi98.86 Kb.
#1785551
TuriСамостоятельная работа
  1   2   3   4   5   6   7   8   9   10   11
Bog'liq
5-mus


МИНИСТЕРСТВО ЦИФРОВЫХ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И КОММУНИКАЦИЙ РЕСПУБЛИКИ УЗБЕКИСТАН
КАРШИНСКИЙ ФИЛИАЛ ТАШКЕНТСКОГО УНИВЕРСИТЕТА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
ИМЕНИ МУХАММАДА АЛЬ-ХОРАЗМИ
ФАКУЛЬТЕТ


САМОСТОЯТЕЛЬНАЯ РАБОТА




Подготовил: Шарафутдинов З
Студент 2-курса


гр ТТ 15-22

Карши-2023
Самостоятельная работа №5
План:
1. Эффективное использование механизма перегрузки операторов при создании классов.
2. Создание и использование шаблонных функции.
3. Создание и использование шаблонных классов.
4. Механизм перезагрузки функций в шаблонных функциях.

Основные стандартные формы операторов new/delete, используемые при создании и удалении объекта и массива типа T следующие:
new T(/* аргументы конструктора */)
new T[/* длина массива */]
delete ptr;
delete[] ptr;

Их работу можно описать следующим образом. При вызове оператора new сначала выделяется память для объекта. Если выделение прошло успешно, то вызывается конструктор. Если конструктор выбрасывает исключение, то выделенная память освобождается. При вызове оператора delete все происходит в обратном порядке: сначала вызывается деструктор, потом освобождается память. Деструктор не должен выбрасывать исключений.
Когда оператор new[] используется для создания массива объектов, то сначала выделяется память для всего массива. Если выделение прошло успешно, то вызывается конструктор по умолчанию (или другой конструктор, если есть инициализатор) для каждого элемента массива начиная с нулевого. Если какой-нибудь конструктор выбрасывает исключение, то для всех созданных элементов массива вызывается деструктор в порядке, обратном вызову конструктора, затем выделенная память освобождается. Для удаления массива надо вызвать оператор delete[], при этом для всех элементов массива вызывается деструктор в порядке, обратном вызову конструктора, затем выделенная память освобождается.
Внимание! Необходимо вызывать правильную форму оператора delete в зависимости от того, удаляется одиночный объект или массив. Это правило надо соблюдать неукоснительно, иначе можно получить неопределенное поведение, то есть может случиться все, что угодно: утечки памяти, аварийное завершение и т.д. Подробнее см. [Meyers1].
В приведенном выше описании необходимо сделать одно уточнение. Для так называемых тривиальных типов (встроенные типы, структуры в стиле С), конструктор по умолчанию может не вызываться, а деструктор в любом случае ничего не делает.
Стандартные функции выделения памяти при невозможности удовлетворить запрос выбрасывают исключение типа std::bad_alloc. Но это исключение можно перехватить, для этого надо установить глобальный перехватчик с помощью вызова функции set_new_handler(), подробнее см. [Meyers1].
Любую форму оператора delete безопасно применять к нулевому указателю.
При создании массива оператором new[] размер может быть установлен нулевым.
Обе формы оператора new допускают использование инициализаторов в фигурных скобках.

Download 98.86 Kb.

Do'stlaringiz bilan baham:
  1   2   3   4   5   6   7   8   9   10   11




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling