2016-10-28 31 views
0

我想消除一些乱码的所有内存泄漏。我有一个类Employee与被堆上了new *char运行期间分配的成员name_。现在有些例子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_已经delted别的地方,试图删除一些东西,也没存在了。

所以,我需要这样的东西

if (char* name_ not deleted yet) 
{ 
    delte name_ 
} 

有没有一种方法来检查withing的if天气成员已被删除?

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

+2

使用'的std :: string',让标准库的实现处理内存管理你。 – NathanOliver

+0

@NathanOliver不幸的是不可能的,因为这是一个assignement,有一些我不允许改变,比如'name_'的类型是'char *'。 –

回答

1

如果你坚持了手动name_内存管理(而不是使用std::string),你可以简单地将其封装到类和delete它通过手动一些reset()功能,删除之后设置name_nullptr。然后在你的析构函数中,你只需检查name_是不是nullptrdelete它。

+1

在空指针上调用'delete'是安全的,所以在调用'delete'之前不需要检查null。 –

+0

@RemyLebeau是的,很棒的通知!不知道为什么我决定重新检查它。感谢您的编辑! –

相关问题