c++ - 删除前将指针设置为 NULL

标签 c++ pointers

所以我偶然发现了这段代码,虽然我已经使用 C/C++ 编写代码大约 5 年了,但我无法理解为什么有人想要这样做。我理解为什么你想在释放内存后将指针设置为 NULL,但我当然不明白为什么有人会想做相反的事情(对我来说看起来像是内存泄漏)。

其次,我很确定在将指针设置为 NULL 并删除它之前没有必要检查指针是否为 NULLas 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/

相关文章:

c++ - 在 B 树中存储键值对

c++ - 公共(public)删除或私有(private)默认构造函数/分配/复制构造函数?

c++ - Windows Phone 8 和 ATL

c++ - 打印此地址的值

c - 在 C 中使用指针表达式迭代二维数组

C++ 显示具有 vector 的 map

c++ - 类问题中的 CUDA 内存管理/指针

c - 如何更改传递给 C 函数的实际参数?

c - C9 9's "restrict"关于指向指针的指针的语义是什么?

c - 什么情况下数组会衰减为指针?