c++ placement new
Не судите строго, это мой второй вопрос, я новичок в с++ и меня очень заинтересовал placement new, хотелось бы узнать как он работает(знаю, что он размещает объект по указанному адресу), но интересуют некоторые уточнения.
Если у меня есть адрес на свободный блок длиной 30 байт(за этим фрагментом идет уже аллоцированный фрагмент, где расположен сконструированный объект) Что будет, если я попробую расположить по этому адресу объект весом 40 байт?(terminate, затирания 10 байт сконструированного объекта, выбор ближайшего подходящего блока)?
int main() { int * temp = new int[10]; // представим, что сразу после 10 int идет фрагмент памяти, который уже занят неким объектом int * temp1 = new(temp) int[100];//? }
2)вызовется ли деструктор для объекта, который размещается на данном участке?
Ответы (2 шт):
Будет неопределённое поведение.
У вас же в примере массив, у него деструктора нет. А если вы хотите вызвать для какого-то объекта деструктор, то надо
deleteиспользовать
Не до конца понял контекст кода. Просто при аллоцировании памяти под массив(динамический), к примеру двумерный, память подчищаете Вы сами:
Создаем:
int** arr = new int*[10];
for (int i = 0; i < 10; i++)
{
arr[i] = new int[10];
}
Очищаем:
for (int i = 0; i < 10; i++)
{
delete [] arr[i];
}
delete [] arr;