前端之家收集整理的这篇文章主要介绍了
c – 删除前将指针设置为NULL,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我偶然发现了这段
代码,虽然我现在已经用C/C++编写了大约5年的
代码,但我无法理解为什么有人想要这样做.我理解为什么你想在释放内存之后将指针设置为NULL,但我当然不明白为什么有人会想要反过来(看起来像是内存泄漏给我).
其次,我很确定在将指针设置为NULL并将其删除之前,没有必要检查指针是否为NULL,as discussed here.
if( m_pio )
{
m_pio = NULL;
delete m_pio;
}
双
删除对象可能导致析构
函数被
调用两次,因此有些人倾向于在
删除后将其设置为NULL.这可以防止在内存上
调用析构
函数,该内存可能已从指针的先前内存地址重新分配.
如此处所示,在删除之前设置为NULL是内存泄漏.固定代码没有内存泄漏:
if( m_pio ) {
delete m_pio;
m_pio = NULL;
}
请注意,在NULL上调用delete(或在C 11中为nullptr)是合法的,因此您可以将代码编写为:
delete m_pio;
m_pio = NULL
原文链接:https://www.f2er.com/c/119748.html