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 шт):
VC++ сразу заметил - использование неинициализированной переменной p. Куда, по какому адресу при этом будет выполняться запись?
Если мы напишем так - разница вроде как небольшая, нет?
int* p = 0;
p = new (p) int(a);
А попробуйте теперь запустить на выполнение...
Первоначальный код - одно большое UB - запись в память по какому-то неопределенному адресу...