【发布时间】:2011-06-27 11:41:28
【问题描述】:
灵感来自this question。
假设在 C++ 代码中我有一个有效的指针并且正确地delete 它。根据 C++ 标准,指针将变为无效(3.7.3.2/4 - 释放函数将使引用所有已释放存储部分的指针无效)。
至少在大多数实现中,它会保留该值,并将存储与之前delete 完全相同的地址,但是using the value is undefined behavior。
标准是否保证指针将保留其值,或者该值是否允许更改?
【问题讨论】:
-
delete签名是否允许它访问指针,即除按值传递之外的任何内容? -
有趣的问题,但纯粹是学术上的好奇心,我希望。我无法想象为什么您在编写代码时需要知道这一点。
-
@Cody Gray:你是对的。在
delete是UB之后使用指针(例如,试图printf()它),因此用户甚至无法合法地读取指针并与原始值进行比较。 -
@Rup:在这种情况下,Delete 是一个没有签名的运算符。 (“删除操作符”是删除操作符调用或显式调用的函数。)
-
@FredNurk:更清楚地说,它是一个调用运算符 (
operator delete) 来委派其工作的关键字。并且该关键字没有“签名”。
标签: c++ pointers delete-operator