new placement в тот же указатель

Читаю про new placement и попался такой пример:

int main(){
    int a = 234;
    int* p = new (p) int(a);   
    (*p)++;                       
 
    cout << *p << '\n';         //235
    cout << a << '\n';          //234
}

В комментариях к нему пишут, что :" данном случае p сырой указатель. Непосредственно ему память мы не выделяем. Но мы выделяем память переменной a".Не могу понять,placemen new же делается в уже готовый участок памяти, но в какой момент она(участок памяти) тогда создается в данном примере, если мы заранее не выделили ничего?


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

Автор решения: Harry

VC++ сразу заметил - использование неинициализированной переменной p. Куда, по какому адресу при этом будет выполняться запись?

Если мы напишем так - разница вроде как небольшая, нет?

int* p = 0;
p = new (p) int(a);   

А попробуйте теперь запустить на выполнение...

Первоначальный код - одно большое UB - запись в память по какому-то неопределенному адресу...

→ Ссылка