删除空指针是否安全?

这是一种好的编码风格吗?


当前回答

无论如何,Delete都会执行检查,所以在您这边检查会增加开销,而且看起来更难看。一个很好的做法是在删除后将指针设置为NULL(有助于避免重复删除和其他类似的内存损坏问题)。

我也喜欢默认情况下删除是设置参数为NULL像在

#define my_delete(x) {delete x; x = NULL;}

(我知道R和L值,但这不是很好吗?)

其他回答

它是安全的,除非重载了删除操作符。如果你重载了delete操作符而不处理null条件,那么它就一点也不安全。

无论如何,Delete都会执行检查,所以在您这边检查会增加开销,而且看起来更难看。一个很好的做法是在删除后将指针设置为NULL(有助于避免重复删除和其他类似的内存损坏问题)。

我也喜欢默认情况下删除是设置参数为NULL像在

#define my_delete(x) {delete x; x = NULL;}

(我知道R和L值,但这不是很好吗?)

为了补充ruslik的回答,在c++ 14中你可以使用这样的结构:

delete std::exchange(heapObject, nullptr);

有一个关于这个问题的常见问题解答。

c++语言保证如果p是,删除p将什么都不做 null。因为你可能把测试搞反了,因为大多数测试 方法迫使您显式地测试每个分支点 不应把多余的如果测试。

我有经验,它是不安全的(VS2010)删除[]NULL(即数组语法)。 我不确定这是否符合c++标准。

删除NULL(标量语法)是安全的。