【发布时间】:2017-04-20 01:41:10
【问题描述】:
(*) 据我所知,标准允许实现修改delete 运算符的操作数,但是大多数实现都不会这样做。
int* ptr = new int(0);
delete ptr; //delete is allowed to modify ptr, for example set it to 0
std::cout << ptr; // UB?
确认(*),ptr(以打印形式)的阅读是否明确?
如果delete确实修改了ptr,是否允许设置一个陷阱值,这会导致读取ptr UB?
【问题讨论】:
-
注意
delete的操作数可以是prvalue,根本不能“修改”。 -
@aschepler 它可能只修改左值参数。例如。我可以想象一个调试工具,它将释放的指针设置为一些已知的位模式,以帮助识别无效使用