[intro.execution]p6 заявляет, что «An instance of each object with automatic storage duration is associated with each entry into its block. Such an object exists and retains its last-stored value during the execution of the block»
[basic.stc]p4 заявляет, что «When the end of the duration of a region of storage is reached, the values of all pointers representing the address of any part of that region of storage become invalid pointer values.»
В коде
int main()
{
auto pi = new int{};
delete pi;
}
Каково будет значение указателя pi
после выполнения delete pi
?
Результат new-expression, а значит и изначальное значение pi
, это pointer to object.
Согласно [intro.execution]p6 объект должен содержать last-stored value.
Согласно [basic.stc]p4, освобождение памяти меняет значение указателя на invalid pointer value.
Значит ли, что освобождение памяти приводит к записи (store) в переменную-указатель?
P.S. Шизофреникам, для которых «became invalid pointer value» это «не изменилось»:
Every value of pointer type is one of the following:
— a pointer to an object or function (the pointer is said to point to the object or function), or
…
— an invalid pointer value.
Надеюсь, «one of the following» ясно даёт понять, что значение не может стать invalid pointer value и при этом оставаться pointer to an object.