Код имеет неопределенное поведение.
std::unique_ptr<int> myInt(stackint);
создает unique_ptr
владеющего объектом , который stackint
указывает на . Какой тип хранилища имеет сам указатель, не имеет значения, только его значение передается в конструктор, а значение указывает на объект int
, созданный путем вызова new
, что означает, что это int
объект имеет динамический c срок хранения .
myInt
деструктор затем вызывается в конце блока (}
) и delete
с int
объект, которым он управлял и на который stackint
все еще указывал, что означает, что значение stackint
теперь является недопустимым значением указателя .
Затем вы разыменовываете это неверное значение указателя с помощью *stackint
, что вызывает неопределенное поведение.