c++ placement new

Не судите строго, это мой второй вопрос, я новичок в с++ и меня очень заинтересовал placement new, хотелось бы узнать как он работает(знаю, что он размещает объект по указанному адресу), но интересуют некоторые уточнения.

  1. Если у меня есть адрес на свободный блок длиной 30 байт(за этим фрагментом идет уже аллоцированный фрагмент, где расположен сконструированный объект) Что будет, если я попробую расположить по этому адресу объект весом 40 байт?(terminate, затирания 10 байт сконструированного объекта, выбор ближайшего подходящего блока)?

     int main()
     {
       int * temp = new int[10]; // представим, что сразу после 10 int идет фрагмент памяти, который уже занят неким объектом
       int * temp1 = new(temp) int[100];//?
     }
    

2)вызовется ли деструктор для объекта, который размещается на данном участке?


Ответы (2 шт):

Автор решения: user394222
  1. Будет неопределённое поведение.

  2. У вас же в примере массив, у него деструктора нет. А если вы хотите вызвать для какого-то объекта деструктор, то надо delete использовать

→ Ссылка
Автор решения: 0x5F3759DF

Не до конца понял контекст кода. Просто при аллоцировании памяти под массив(динамический), к примеру двумерный, память подчищаете Вы сами:

Создаем:

    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;
→ Ссылка