在这个页面上,写道:
一个原因是delete的操作数不需要是lvalue。考虑:
delete p+1;
delete f(x);
这里,delete的实现没有指针可以分配为零。
将数字添加到指针中,会使指针向前移动那么多个sizeof(*p)
单位。
那么,delete p
和delete p+1
之间有什么区别,为什么只将指针设置为0
会成为delete p+1
的问题?
int *a = new int(10); *(a + 1) = 5;
呢?这里p+1
也会是一个指针。 - Lazera+1
是一个 rvalue,但是*(a+1)
是一个 lvalue,这就是你所分配的。Stroustrup 谈论的是delete
将指针清零,而不是指向的对象。 - Steve Jessop