指针是否保证在C++中的`delete`后保留其值?

sha*_*oth 16 c++ pointers delete-operator

灵感来自这个问题.

假设在C++代码中我有一个有效的指针并且正确delete.根据C++标准,指针将变为无效(3.7.3.2/4 - 解除分配函数将使所有指针无效,指向解除分配的存储的所有部分).

至少在大多数实现中,它保留了值并将存储与以前完全相同的地址delete,但是使用该值是未定义的行为.

标准是否保证指针将保留其值或允许更改的值?

CB *_*ley 19

不,它不能得到保证,并且实现可以合理地将零分配给左值操作数delete.

Bjarne Stroustrup曾希望实现会选择这样做,但并不是很多.

http://www.stroustrup.com/bs_faq2.html#delete-zero


fre*_*low 10

无论出于何种原因,如果您想确保指针变量未被更改delete,请写入:

delete p + 0;
Run Code Online (Sandbox Code Playgroud)