Это вызывает неопределенное поведение .Неопределенное поведение означает, что может произойти все, в том числе и то, что оно работает.Временный unique_ptr
фактически уничтожается, и в результате освобождается 100-элементный массив char
.Вы читаете и записываете в область памяти, которая больше не выделена вам.
Просто так получилось, что к моменту работы с ним память, указанная x
, не была выделена или прочитана / записана для чего-то другого.Но эта память уже была освобождена временным unique_ptr
, поэтому вы не должны связываться с ней.
Только не делайте этого.Если вы хотите сохранить массив, но не unique_ptr
, используйте release()
.