【发布时间】:2010-10-14 10:53:52
【问题描述】:
我有一些代码使用大量指向同一地址的指针。 给出一个等效的简单示例:
int *p = new int(1);
int *q = p;
int *r = q;
delete r; r = NULL; // ok
// delete q; q = NULL; // NOT ok
// delete p; p = NULL; // NOT ok
如何在不多次删除的情况下安全删除? 如果我有很多指针都指向同一个地址的对象,这尤其困难。
【问题讨论】:
-
不应该这样工作吗?标准中指定了 delete null ,因此它允许并且应该工作。好吧,这不是最好的编码风格......
-
@Mario:删除 NULL 被指定为 NO-OP,但调用它确实会产生一些开销。
-
问题是q,p不会为NULL,所以会有双重删除。
-
@Mario 当您删除
q和p时,您没有在 NULL 上调用delete;您正在对该整数的旧地址调用 delete,q和p仍在保留。 -
哎呀,不应该在午餐后不久发布...谢谢纠正我!
标签: c++ pointers memory delete-operator