【问题标题】:Is there any use in assigning NULL to a pointer after deleting it in destructor in C++? [duplicate]在 C++ 的析构函数中删除指针后将 NULL 分配给指针有什么用? [复制]
【发布时间】:2011-06-07 16:01:42
【问题描述】:

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

我看到一些这样的代码,

void ClassA::~ClassA()
{

delete member;
member = NULL;

}

由于在这个析构函数之后特定的实例不再存在(或者实例被破坏并且它的成员不能再被使用或取消引用),将NULL分配给成员变量的指针有什么用?

这只是从其他地方删除指针并为其分配 NULL 的做法吗?

【问题讨论】:

  • 您不使用智能指针是否有特殊原因?
  • 我简直不敢相信以前没有人问过这个问题。
  • @sharptooth:我不敢相信这不是黄油!

标签: c++ pointers destructor variable-assignment


【解决方案1】:

这毫无意义 - 在重新分配之前不会再次使用空间。

【讨论】:

    【解决方案2】:

    这对于发布代码没有意义,但可能对调试有帮助。

    【讨论】:

    • 为什么对调试有帮助?
    • @Deqing:因为它告诉你指针已经被释放了?
    【解决方案3】:

    我认为没有理由更新已经超出范围的数据,并且“以防万一”做事不是好的做法。 无论如何不要盲目地遵循“良好做法”,与其成为“良好做法”宗教最狂热的实践者,不如了解自己为什么做事。

    【讨论】:

      【解决方案4】:

      是的,这只是一个好习惯。帮助人们不要忘记在其他地方设置指向 null 的指针;)

      【讨论】:

      • 这是一种糟糕的做法。在我的任何现代客户端(非实用程序)代码中,我从来没有将指针设置为空。这是因为我们不应该使用原始指针来管理资源。
      • 如果您的代码编写正确,则根本不应该在很多地方显式设置指向NULL 的指针。
      • 如果这种推理成立,那么你在其他地方做的事情非常糟糕。
      • @GMan 您的意思是使用来自例如的智能指针升压更好? :)
      • @davogotland:是的。来自 Boost 或您的标准库实现,或来自其他一些库(在智能指针方面有很多选择)。除了极少数用例之外,不使用智能指针是错误的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2014-12-30
      • 2018-08-24
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      相关资源
      最近更新 更多