LINUX.ORG.RU

Сообщения vectorisation

 

intro.execution/6 + basic.stc/4 = ?

[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.

 

vectorisation
()

RSS подписка на новые темы