我已经使用以下头文件定义了一个 C++ 类:
class EarleyParser
{
public:
EarleyParser();
virtual ~EarleyParser();
void initialize( string filePath, bool probabilityParse );
private:
bool probabilityParser;
typedef unordered_map< string, list<Production>* > productionHashTable;
productionHashTable earlyHashTable;
};
如您所见,该类的成员元素是一个 unordered_map
。其关键元素是字符串,内容元素是指向另一个名为 Production
的对象列表的指针(不要介意,它可以是任何东西)。
我的问题是我是否应该将它留给默认析构函数以释放分配的内存,或者我是否应该手动检查哈希表并删除其所有元素。
在第二种情况下,程序是什么?为每个元素调用它可以吗?
EarleyParser::productionHashTable::const_iterator got = this->earlyHashTable.find( "key" );
delete[] got->second;
最佳答案
您需要说明谁拥有 list<Production>
EarlyParser
拥有的对象.如果EarlyParser
拥有它们,那么您需要释放资源。您可以通过遍历列表并调用 delete
来完成此操作在每个取消引用的迭代器上(不是 delete[]
)。或者您可以存储 unique_ptr<list<Production>>
反而。另一方面,最简单的解决方案是存储 list<Production>
除非您真的有非常充分的理由存储指针。
关于c++ - 避免 C++ 类中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12686510/