所以,这是我的例子来解释这个问题
void * p1;
int * p2, * p3;
p2 = new int;
p1 = p2;
p3 = (int *) p1;
释放内存,下面3行是否等价?
delete p2;
delete p3;
delete (int *) p1;
我使用它的原因是我想在不知道其类型的情况下在函数之间传递一个指针,例如我定义了一个 void 指针并通过如下调用其他函数来更改其值:
void * p1;
func1(p1); //in this function, p2 = new int and p1 is assigned as p1 = p2;
func2(p1); //in this function, p1 is assigned to another pointer: int * p3 = (int *)p1;
然后调用func3释放内存
func3(p1); //delete int * p1
调用func3后,我还需要处理func1中的p2吗?
谢谢!
最佳答案
是的,所有 3 个 delete
都是等价的。重要的是要注意,在发布的示例中,所有 3 个指针都指向同一事物。这意味着如果您删除
其中一个,您不应该删除
其他的,因为它们指向的内存已经被释放。
如果您确实尝试删除
已经发布的内容,您将引发未定义行为。如果幸运的话,您的程序会崩溃,但任何事情都有可能发生。
关于c++ - 删除从另一个指针分配的指针,我应该再次删除另一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259305/