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)