delete
会为您检查指针是否为NULL,因此您是正确的,不需要进行检查。
< p > 您可能还会看到一些人在删除后将指针设置为NULL,以防止您做任何愚蠢的事情,如尝试使用不再属于您的内存或停止您两次删除指针,这将导致错误。
虽然现在是安全的,但过去并非如此 :-) 所以这可能是习惯性的。此外,还有其他删除的后果。1)如果您正在使用专用内存管理器并覆盖 new 和 delete 运算符,则很可能需要进行检查Operator Delete以获取更多详细信息。
free
正确地处理 NULL
(至少从 C89 开始,如果在 ANSI C 中也有的话就更不用说了)。因此,我很难相信曾经存在过一个可用的 C++ 实现无法处理 delete NULL;
的情况。 - user395760大多数人这样做是因为他们通常有错误处理程序(除此之外,我真的看不出来进行检查的意义)。在某些情况下,他们这样做是为了检查他们是否释放了某些东西,并且没有意外更改指针并通过未释放它而导致内存泄漏。
free(NULL);
应该适用于所有情况,而且不会出错,所以除非涉及错误处理,否则可以删除if语句并直接执行free操作。
kfree
和vfree
也能说出同样的话吗? - Shahbaz