所以我偶然发现了这段代码,虽然我已经用C/C++编写了大约5年的代码,但我无法理解为什么有人想要这样做.我理解你为什么要NULL在释放内存之后设置指针,但我当然不明白为什么有人会想要反过来(看起来像是内存泄漏给我).
其次,我很确定没有必要在将指针NULL设置为NULL并将其删除之前检查指针是否正确,如此处所述.
if( m_pio )
{
m_pio = NULL;
delete m_pio;
}
Run Code Online (Sandbox Code Playgroud)
双删除对象可能导致析构函数被调用两次,因此有些人倾向于NULL在删除后将其设置为.这可以防止在内存上调用析构函数,该内存可能已从指针的先前内存地址重新分配.
如此处所示,NULL在删除之前设置是内存泄漏.固定代码没有内存泄漏:
if( m_pio ) {
delete m_pio;
m_pio = NULL;
}
Run Code Online (Sandbox Code Playgroud)
请注意,在NULL(或nullptr在C++ 11中)调用delete 是合法的,因此您可以将代码编写为:
delete m_pio;
m_pio = NULL
Run Code Online (Sandbox Code Playgroud)