【问题标题】:Do I have to set pointer to nullptr in destructor? [duplicate]我必须在析构函数中设置指向 nullptr 的指针吗? [复制]
【发布时间】:2010-06-25 09:36:35
【问题描述】:

可能重复:
Is it worth setting pointers to NULL in a destructor?

我是否必须这样做:

~MyClass()
{
delete[] my_data_;
my_data_ = nullptr;//DO I HAVE TO WRITE THIS LINE?
}

谢谢。

【问题讨论】:

    标签: c++ destructor


    【解决方案1】:

    不,它只是杂乱无章的代码,没有实际用途和can be even optimized away by the compiler。无论如何,一旦析构函数返回对象的生命周期结束并且没有合法的方法可以访问它 - 无论如何尝试都会导致未定义的行为。

    【讨论】:

    • 没有合法的方式,但总是有非法的。在具有悬空指针的大型项目中,您可以不时获得一些东西。
    • @jdehaan:由于对象生命周期已经结束,因此无法保证它先前占用的存储空间不会被其他不相关的对象重用,因此依赖指针为空并不能保证任何事情。跨度>
    • 在调试版本中,指针通常会被已知的调试值覆盖,而在发布版本中,空分配通常会得到优化。因此,除非您使用非常古老或深奥的编译器,否则这完全是浪费时间。
    • @sharptooth,是的,我现在同意,它只会给人一种虚假的安全感。
    • @sharptooth 依靠指针为空比在指向无效数据时尝试使用它要好。在我们无法实现 RAII 的 C 语言中,我实际上会考虑在释放内存后将指针设置为 null 是一个好习惯。
    【解决方案2】:
    delete[] my_data_;
    

    应该做所有你需要的,在你使用它之后,将 my_data_ 设置为 nullptr 是没有必要的。

    【讨论】:

      【解决方案3】:

      没有。一旦析构函数完成,就无法合法访问该指针,因此它的最终值是什么并不重要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-04
        • 2021-10-18
        • 1970-01-01
        • 2019-06-20
        • 2022-01-11
        • 2021-12-17
        • 1970-01-01
        相关资源
        最近更新 更多