c++ - 我可以根据是否有东西可以释放来释放内存吗?

标签 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 成员是否已经被删除?

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

最佳答案

如果您坚持手动管理name_ 的内存(而不是使用std::string),您可以简单地将它封装到您的类中并删除 手动通过一些 reset() 函数将 name_ 删除后设置为 nullptr。然后在您的析构函数中,您只需检查 name_ 是否不是 nullptr删除它。

关于c++ - 我可以根据是否有东西可以释放来释放内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40311213/

相关文章:

c++ - 下载自定义文件格式

c++ - QMap 是否支持自定义比较器功能?

c# - 为什么这个 .net UIAutomation 应用程序会泄漏/合并?

exception - 处理 "java.lang.OutOfMemoryError: PermGen space"错误

java - 在java中使用对象数组时出现NullPointerException

C++11 局部静态值不作为模板参数

C++ TCP 服务器-客户端小问题

c++ - 如何在 Qt 小部件应用程序中翻译来自外部文件的字符串?

c++ - 在 C++ 中删除和释放 vector 内存的正确方法(防止不同的内存相关错误)

c++ - istream_iterator 内存泄漏