Другие считают использование указателей неподходящим для этого сценария.Я согласен.
Кроме того, когда конструктор получает копию - по значению - значение, которое вы берете по адресу, находится в стеке (вызова).Когда этот конструктор завершает работу, локальная переменная уничтожается (обычно нет операции для встроенных типов, int, char, float и т. Д.), И доступ к ним через указатель является «неопределенным поведением».
Почемуэто происходит следующим образом: Неопределенное поведение означает, что что-либо может произойти. Предпочтительно диагностика компилятора, альтернативно сбой или, что еще хуже, видимая как поврежденная информация, но в худшем случае это работает, если совпадениядо более позднего времени - см. также Программирование по совпадению .
Эта область после выхода из конструктора будет открыта для повторного использования при вызове других функций - им потребуется место для хранения их локальных переменных, параметров и адресов параметров / возврата для вызова еще других функций.
По некоторому совпадению, gcc (эта версия, эти флаги компилятора) не перезаписывает это место в стеке для печати значений, поэтому вы читаете те значения, которые вы ожидаете.