Вы берете адрес scoped_ptr
, называемый p
.Есть только один из них!
Если бы вместо этого вы напечатали &*p
или p.get()
(хотя предпочитаете (void*)p.get()
для здравомыслия), вы бы напечатали адрес , который он сейчасуказывает на .
Этот адрес всегда будет изменяться, поскольку вы создаете второй объект (используя new
) немного раньше, чем первый объект будет уничтожен, и объекты не могут совместно использовать адреса.
Если вы сначала сделали .reset()
, то вы можете увидеть, а может и не увидеть, что этот адрес меняется, в зависимости от того, что сделали внутренности new
;объекты не имеют , чтобы иметь адреса, уникальные для времени жизни вашей программы, если они не разделяют адрес другого объекта, который все еще существует!Однако даже тогда, на практике, если честно, я был бы удивлен, если бы второй динамически распределенный int
оказался по тому же адресу, что и первый.