6

可能重复:
是否有任何理由在删除之前检查 NULL 指针?

我经常在代码中看到以下内容:

if(pointer)
    delete pointer;

据我了解,删除空指针是安全的,那么这个检查有什么意义呢?

4

4 回答 4

9

delete将为您检查指针是否为 NULL,因此不需要检查是对的。

您可能还会看到有些人在删除指针后将其设置为 NULL,这样您就不会做任何愚蠢的事情,例如尝试使用不再属于您的内存或阻止您两次删除指针,这将导致错误。

于 2011-11-04T03:15:30.653 回答
1

虽然现在很安全,但并不总是 :-) 所以这可能是习惯性的。还有其他后果要删除。1)如果您使用专门的内存管理器并覆盖 new 和 delete 运算符,那么您很可能必须检查Operator Delete以获取更多详细信息

于 2011-11-04T03:13:57.980 回答
1

检查不是必需的。

文档指出 delete 将“释放 ptr 指向的内存块(如果不是 null)”

于 2011-11-04T03:14:25.210 回答
0

大多数人这样做是因为他们通常会进行错误处理(除此之外,我并没有真正看到进行检查的意义)。在某些情况下,他们这样做是为了检查他们是否正在释放某些东西,而不是意外地更改某处的指针并通过不释放它而导致内存泄漏。free(NULL);应该在所有情况下都可以工作并且不会出错,因此除非涉及错误处理,否则您可以删除 if 语句并免费执行。

于 2011-11-04T03:15:05.637 回答