【发布时间】:2010-04-17 02:21:54
【问题描述】:
在this page,上面写着
一个原因是 delete 不必是左值。 考虑:
delete p+1;
delete f(x);
这里, 执行删除没有 一个可以分配零的指针。
向指针添加一个数字会将其在内存中向前移动sizeof(*p) 的许多个单位。
那么,delete p 和 delete p+1 之间有什么区别,为什么将指针 0 设置为只有 delete p+1 的问题?
【问题讨论】:
-
Strstroup 建议 C++ 编译器将左值指针设置为 NULL。我个人认为一些非空常量更适合查找双重删除错误,但即便如此......
-
因为加法的结果是右值,不能赋值。同样的原因你不能说 (1 + 1) = 4。
-
@GMan:那
int *a = new int(10); *(a + 1) = 5;呢?这里p+1也是一个指针。 -
这不是分配指针的目标(刚刚被释放),而是重定向指针本身。
-
在您的代码中,
a+1是一个右值,但*(a+1)是一个左值,这就是您分配的值。 Stroustrup 正在谈论delete将指针归零,而不是指针。
标签: c++ pointers memory delete-operator