Технически память, в которой хранилась память a
, доступна для нас в других контекстах, поэтому, чтобы ответить на ваш вопрос, да.
Это зависит от некоторых факторов. Там может даже не о памяти. В вашем конкретном примере оптимизатор может просто вырезать все. Даже если вы делаете что-то вроде cout << a
, может быть встроен 5
, который не находится в памяти.
Обратите внимание, что если вы передаете по ссылке, то срок службы соответствует исходной переменной.
Кроме того, только потому, что он освобожден, это не означает, что память автоматически очищается после этого. Значение может оставаться там до тех пор, пока эта память не будет повторно использована.
Ваш пример Экспонаты неопределенное поведение:
void fun3(int *&p, int a){
p = &a;
}
a
является локальной переменной, и вы берете его адрес и назначить его p
, которые вы затем использовать вне функции. Все может случиться.
Тот факт, что вы можете распечатать адрес памяти, не означает, что вы можете (юридически) манипулировать им. –