rub*_*nvb 1 c++ pointers delete-operator
假设我们有一段代码:
//...
class A
//...
A* myA = new A();
A* myPointerToMyA = myA;
delete myA;
delete myPointerToMyA; // this is wrong, no?
//...
Run Code Online (Sandbox Code Playgroud)
最后一行与上面一行完全相同,对吗?所以我现在将是delete
一个无效的/ NULL指针?
我知道这可能是一个愚蠢的问题,但我仍需要一些保证.
小智 5
确实这是错的.并且与其他评论相反,并不是因为你没有用新的分配它.
myA和myPointerToMyA都指向同一个东西.通过它们中的任何一个删除都很好 - 但是你只能合法地删除它,因为它们指向同一个东西 - 它被指向的是被删除的,而不是指针本身.
有两个指向同一个东西的指针是没有错的,但是你可以跟踪谁拥有它,以及谁负责删除它.
在这种情况下,删除指向已删除对象的指针,行为是"未定义的" - 运行时可以执行它喜欢的操作!(我几乎可以保证你不会喜欢它......)
是的,这是错的.使用时delete
,您不是要删除指针.相反,你要删除它指向的内容.因此,当您使用delete on
指针时,该指针指向的内存将被释放.指向该内存的任何其他指针现在指向未分配的内存,并且是一个悬空指针.使用悬空指针会导致未定义的行为,并且尝试释放已释放的内存当然无效,因此delete
在悬空指针上使用肯定是错误的.它可能会导致分段错误.