c++ - 为什么我可以做 "delete p;",而不是 "delete (p+1);"?为什么 delete 需要左值?

标签 c++ pointers memory delete-operator

关于 this page , 是这么写的

One reason is that the operand of delete need not be an lvalue. Consider:

delete p+1; 
delete f(x); 

Here, the implementation of delete does not have a pointer to which it can assign zero.

将一个数字添加到一个指针会在内存中将它向前移动那么多 sizeof(*p) 单位。

那么,delete pdelete p+1 有什么区别,为什么指针 0 只是一个问题使用 delete p+1?

最佳答案

你不能做 p + 1 = 0。出于同样的原因,如果您执行 delete p + 1,则 delete 无法将其操作数 (p+1) 归零,这就是 Stroustrup 常见问题解答中的问题。

您在程序中写过 delete p+1 的可能性非常低,但这不是重点...

关于c++ - 为什么我可以做 "delete p;",而不是 "delete (p+1);"?为什么 delete 需要左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656970/

相关文章:

c++ - initializer_list 和 move 语义

c++ - C++ 中复杂度为 O(1) 的单链表操作

指向类成员的 C++ 函数指针

c - 如何从 C 中的函数参数中检索函数?

java - 栈帧占用的大小

c++ - 在 C++ 中获取总内存和可用内存

c - free 和 malloc 在 C 中是如何工作的?

c++ - 使用智能指针管理缓冲区

c - 使用 C 访问 Berkeley DB 结构内的值

c++ - 通过引用传递的指针随着每次循环迭代而更新 : (Sanity check - Part 2)