我试图从一些凌乱的代码中消除所有内存泄漏。我有一个类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
天气?
编辑: 感谢您已回答我的问题的链接,的确如此!
答案 0 :(得分:1)
如果您坚持手动管理c
的内存(而不是使用name_
),则只需将其封装到您的班级中,然后通过某些std::string
手动将其delete
封装删除后将reset()
设置为name_
的函数。然后在析构函数中,只需检查nullptr
是否name_
和nullptr
。