我写了这个哈希映射(这是电话访谈练习的一部分),当我放置一个元素时,我做了一个new Node(key, value)
。我想确保当hashmap本身超出范围时我正在清理。从C++的链表中删除指针
我错过了这里的任何东西吗?有什么方法可以检查是否有内存泄漏?
class HashMap {
private:
list<Node*> data[SIZE];
public:
~HashMap();
Node* get(int key);
void put(int key, int value);
int hashFn(int val){ return val % 13; }
};
HashMap::~HashMap(){
for(int i = 0; i < SIZE; ++i){
list<Node*>& val = data[i];
for(list<Node*>::iterator it = val.begin(); it != val.end(); it++){
Node* n = *it;
delete n;
}
}
}
对于古玩:完整的代码是在这里:http://rextester.com/EHPCYW12862
编辑:
而且,我真的需要调用list.clear()到底(因为我已经释放列表中的所有节点)?
看起来不错,但就是它最好使用智能指针 – Andrew 2012-08-10 07:02:27
使用boost :: ptr_list,问题消失了。 – BatchyX 2012-08-10 07:02:34
为什么你不使用列表的向量呢? – 2012-08-10 07:04:51