删除空指针安全吗?

删除空指针安全吗?

删除空指针安全吗?

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


长风秋雁
浏览 532回答 3
3回答

不负相思意

delete无论如何,都要执行检查,所以在您的一侧检查它会增加开销,而且看起来更丑。一个非常良好做法是将指针设置为空。delete(有助于避免双重删除和其他类似的内存损坏问题)。我也希望delete默认情况下,参数设置为NULL,如#define my_delete(x) {delete x; x = NULL;}(我知道R和L值,但这不是很好吗?)

Helenr

从C+0x草案标准。$5.3.5/2-“[.]在这两种选择中,删除操作数的值可能是空指针值。[.‘”当然,没有人会对带空值的指针进行“删除”,但是这样做是安全的。理想情况下,不应该有删除空指针的代码。但是,在循环中删除指针(例如在容器中)时,它有时是有用的。由于删除空指针值是安全的,因此可以真正地编写删除逻辑,而无需显式检查要删除的空操作数。顺便提一下,C Standard$7.20.3.2还说,空指针上的“空闲”不起作用。自由函数使PTR所指向的空间被释放,也就是说,可以用于进一步的分配。如果PTR是空指针,则不会发生任何操作。

忽然笑

是的很安全。删除空指针没有坏处;如果将未分配的指针初始化为零,然后简单地删除,它通常会减少函数尾部的测试次数。由于上一句造成了混乱,因此有一个例子-也不是例外安全-说明了所描述的内容:void somefunc(void){     SomeType *pst = 0;     AnotherType *pat = 0;     …     pst = new SomeType;     …     if (…)     {         pat = new AnotherType[10];         …     }     if (…)     {         …code using pat sometimes…     }     delete[] pat;     delete pst;}可以使用示例代码选择各种类型的nit,但概念(我希望如此)是清楚的。指针变量初始化为零,以便delete函数末尾的操作不需要测试它们在源代码中是否为非空;库代码无论如何都会执行该检查。
打开App,查看更多内容
随时随地看视频慕课网APP