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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...