所以我偶然发现了这段代码,虽然我已经使用 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
(或 C++11 中的 nullptr
)上调用 delete 是合法的,因此您的代码可以改写为:
delete m_pio;
m_pio = NULL
关于c++ - 删除前将指针设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35371506/