Laz*_*zer 4 c++ memory pointers delete-operator
在这个页面上,它是写的
一个原因是删除的操作数不必是左值.考虑:
delete p+1;
delete f(x);
Run Code Online (Sandbox Code Playgroud)
这里,delete的实现没有指向它的指针.
在指针中添加一个数字会使它在内存中向前移动那么多个sizeof(*p)单位.
那么,delete p和之间的区别是什么delete p+1,以及为什么0只使指针成为问题delete p+1呢?
你做不到p + 1 = 0.出于同样的原因,如果你这样做,delete p + 1那么删除不能将其操作数归零(p + 1),这就是Stroustrup常见问题解答中的问题.
你曾经写过delete p+1一个程序的可能性非常低,但那就是重点......
p和p + 1指向不同的地方,正如你正确地说sizeof(*p)单位分开.您无法删除尚未分配的内容,例如:
A* p = new A();
p++;
delete p-1;
Run Code Online (Sandbox Code Playgroud)
会删除原始分配.当未分配p + 1时删除p + 1是未定义的; glib翻出来:
*** glibc detected *** free(): invalid pointer: 0x0804b009 ***
Run Code Online (Sandbox Code Playgroud)
实现不能为零p + 1,因为p + 1不是要修改的变量.这段话说的是
delete p;
Run Code Online (Sandbox Code Playgroud)
可以翻译成
free(p);
p = 0;
Run Code Online (Sandbox Code Playgroud)
p + 1没有意义