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


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

new int{42}
new int[8]{1,2,3,4}
При подключении заголовочного файла  становятся доступными еще 4 стандартные формы оператора new:
new(ptr) T(/* аргументы конструктора*/);
new(ptr) T[/* длина массива */];
new(std::nothrow) T(/* аргументы конструктора */);
new(std::nothrow) T[/* длина массива */];

Первые две из них называются размещающим оператором new (non-allocating placement new). Аргумент ptr — это указатель на область памяти, размер которой достаточен для размещения экземпляра или массива. Также область памяти должна иметь соответствующее выравнивание. Этот вариант оператора new не выделяет памяти, он обеспечивает только вызов конструктора. Таким образом данный вариант позволяет разделить фазы выделения памяти и инициализации объектов. Эта возможность активно используется в стандартных контейнерах. Оператор delete для объектов, созданных таким способом, вызывать, конечно, нельзя. Для удаление объекта надо прямо вызвать деструктор, а затем освободить память способом, зависящим от способа выделения памяти.
Вторые два варианта называются не выбрасывающим исключений оператором new (nothrow new) и отличаются тем, что при невозможности удовлетворить запрос возвращают nullptr, а не выбрасывают исключение типа std::bad_alloc. Удаление объекта происходит с помощью основного оператора delete. Эти варианты считаются устаревшими и не рекомендованы для использования.
Стандартные формы операторов new/delete используют следующие функции выделения и освобождения памяти (allocation and deallocation functions):
void* operator new(std::size_t size);
void operator delete(void* ptr);
void* operator new[](std::size_t size);
void operator delete[](void* ptr);
void* operator new(std::size_t size, void* ptr);
void* operator new[](std::size_t size, void* ptr);

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