Вы ошибаетесь, p1
не указывает на a
.
Вместо std::make_unique<int>(a)
создайте новый объект int
и инициализируйте его текущим значением из a
.
Чтобы p1
указать на a
, вам нужно сделать
std::unique_ptr<int> p1(&a);
Однако это влечет за собой другие проблемы, такие как p1
захват владения из &a
и попытка освободить эту память при разрушении p1
(что невозможно).
Вы можете использовать Повышение null_deleter
, чтобы избежать последней проблемы.
Но я рекомендую, чтобы в большинстве ситуаций вы не смотрели на умные указатели как простые самоуничтожающиеся указатели, а вместо этого с точки зрения владения.