我可以根据是否有免费的东西释放内存吗?

时间:2016-10-28 18:33:12

标签: c++ memory-leaks

我试图从一些凌乱的代码中消除所有内存泄漏。我有一个类Employee,其成员name_在运行时期间在堆上分配new *char。现在有一些实例在name_的析构函数被调用之前手动删除了Employee。我知道这是不好的做法。但是,在某些情况下,我仍然需要通过析构函数删除name_。我试过像

这样的东西
Employee::~Employee(){
  if (this->name_)
  {
    delete[] this->name_;
  }
}

if (this->name_ != NULL)
{
  delete[] this->name_;
}

if (this->name_[0] != '\0')
{
  delete[] this->name_;
}

但是这些选项没有意识到name_已经在其他地方被删除,并试图删除不再存在的东西。

所以我需要像

这样的东西
if (char* name_ not deleted yet)
{
  delte name_
}

有没有办法检查成员已被删除的if天气?

编辑: 感谢您已回答我的问题的链接,的确如此!

1 个答案:

答案 0 :(得分:1)

如果您坚持手动管理c的内存(而不是使用name_),则只需将其封装到您的班级中,然后通过某些std::string手动将其delete封装删除后将reset()设置为name_的函数。然后在析构函数中,只需检查nullptr是否name_nullptr