2011-11-04 87 views
6

可能重复:
Is there any reason to check for a NULL pointer before deleting?删除空指针

我经常看到以下代码:

if(pointer) 
    delete pointer; 

我的理解它是安全的删除空指针,那么这个检查的重点是什么?

+2

.....是否安全? – slartibartfast

+3

重要的一点是,一旦删除,将其设置为NULL。 – vrrathod

+1

据我的理解,你的理解是正确的,但并非所有人都分享它。但让我们看看语言水平如何说。 – delnan

回答

9

delete将检查指针为NULL你,所以你是正确的,则不需要检查。

你也可以看到,有些人设置的指针为NULL 后它删除,这样你就不会做任何愚蠢的事喜欢尝试使用内存不再是你或删除指针两次阻止你,这会导致错误。

+0

您的意见“让你不要做任何愚蠢的事喜欢尝试使用内存不再是你的”,甚至取消对NULL指针是UB。当指针再次被删除时(这是你已经提到的双删除) –

1

尽管现在是安全的,它并非总是如此:-)很可能习惯。还有其他的后果要删除。 1)如果你使用的是专门的内存管理器,并覆盖new和delete操作,那么你很可能必须做检查Operator Delete更多细节

+6

'[需要的引证]'。这是添加一个非常简单的事情,IIRC C已保证'free'手柄'NULL'正确,因为永远(至少C89,我也不会感到惊讶,如果它是在ANSI C太)。所以我觉得很难相信曾经有一个可用的C++实现不能处理'delete NULL;'。 – delnan

1

的检查是没有必要的。

The documentation规定,删除将“取消分配ptr指向的内存块(如果不是空)”

0

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