所以,这是我的例子来解释这个问题
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吗?
thanks!
是的,全部 3 个delete
s 是等价的。值得注意的是,在发布的示例中,所有 3 个指针都指向同一对象。这意味着如果您delete
其中之一,你不应该delete
其他的因为它们指向的内存已经被释放了。
如果你尝试delete
已经发布的东西,你会唤起未定义的行为。如果幸运的话,你的程序会崩溃,但任何事情都有可能发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)