析构函数,它还为C++中的特定哈希类释放内存
Destructor that also deallocates memory for a particular Hash Class in C++
我正在学习C++并尝试编写一个Hash类。到目前为止,一切都很好,除了当我的程序完成使用哈希类时,我的哈希表会出现内存泄漏。我希望在编写一个析构函数时能得到一些帮助,该析构函数可以删除存储在堆中的元素。
这是我的hashclass.h文件:
class Hash {
public:
Hash();
/* Bunch of methods here*/
virtual ~Hash();
private:
static const int size = 20;
struct item{
string name;
int number;
item* next;
};
item* HashTable[size];
};
在我的hashclass.cpp中,我的构造函数有以下实现:
Hash::Hash(){
for (int i = 0; i < size; i++) {
HashTable[i] = new item;
HashTable[i]->name = "";
HashTable[i]->number = 0;
HashTable[i]->next = NULL;
}
}
有人能解释如何编写正确的析构函数来释放用于构建这个哈希表的所有内存块吗。
给定源,自然析构函数将是:
Hash::~Hash()
{
for (int i=0; i<size; ++i)
{
while (HashTable[i])
{
item *victim = HashTable[i];
HashTable[i] = victim->next;
delete victim;
}
}
}
注意:您的类不符合三规则。阅读链接文章,因为它很重要,你越早学会越好。
析构函数的一种方法。
Hash::~Hash(){
for (int i = 0; i < size; i++) {
// first: you must delete HashTable[i]->next <-- your homework.
// second: delete HashTable[i]
if (HashTable[i])
delete HashTable[i];
}
}
作为一般规则,您应该始终拥有相同数量的运算符new和运算符delete。如果您有运算符new[],则必须使用运算符delete[]。
例如,分配:
char * foo = new char[size];
解除分配:
delete [] foo;
相关文章:
- 使用对象的基类部分模板专用化对对象进行哈希处理::哈希
- 标准库容器最简单、性能差的哈希类是什么?
- 为自定义类C++实现哈希
- 我可以比朴素哈希表更快地将随机字符串映射到两个类吗?
- 通过自定义结构和链接列表类中的C 中的哈希表
- 错误:"哈希"不是类模板
- 如何为模板类实现std ::哈希
- 内部可哈希类声明失败
- 将密钥哈希存储在类中以提高效率
- 用户定义类的哈希函数.如何交朋友?:).
- 哈希类哈希
- 将_back推入哈希地图类中的向量
- 函数指针(类成员函数)的哈希映射
- 调用哈希类函数
- 如何在无序映射中为自定义类重用字符串类的哈希函数
- C++ 重写<T> T 派生类的哈希
- 使用哈希表中的派生类搜索函数
- 析构函数,它还为C++中的特定哈希类释放内存
- 如何使用模板类的模板类子类从哈希表实现哈希集
- 使用模板实现c++哈希表类