可扩展哈希 - 析构函数C++
extendible hashing - destructor C++
所以...我已经实现了一个版本的可无限哈希...我现在的问题是析构函数。
我在 Hash 类中使用了一个指针数组,这些指针指向类 Bucket 中的存储桶。问题是同一存储桶上可能有多个指针。
在 Hash 类的析构函数中,我必须删除每个存储桶,然后删除数组,但我必须小心不要删除同一个存储桶两次(我认为这会导致错误)。为了做到这一点,我使用了一个布尔向量来记住桶是否已被删除。
我现在的问题是:有没有办法知道存储桶是否已在不使用更多内存(布尔向量)的情况下被删除?
LE:我使用 nullptr 解决了析构函数问题(现在似乎可以工作了),但是......另一个问题:我怎样才能准确地遍历每个存储桶 1 次(例如,用于查找最小和最大元素)。这次我不能使用 nullptr(指针需要留在原地 - 在存储桶上)
只需迭代使用擦除功能
while (size ())
{
erase(begin());
}
我在 Hash 类中使用了一个指向存储桶的指针数组 从类桶。问题是可以有多个指针 同一个桶。
我现在的问题是:有没有办法知道一个桶是否已经 被删除而不使用更多内存(布尔向量)?
当然 - 使用引用计数。 将一个整数成员变量放在 Bucket 类中,初始化为零。 每当您创建指向该存储桶对象的指针时,请递增整数。 每当使指向存储桶的指针失效时(即,每当在该指针上调用 delete 时),请递减整数成员变量。 如果该递减导致整数变为零,则您知道存储桶没有更多指向它的指针,因此请删除存储桶。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 什么时候调用析构函数
- 优先顺序:智能指针和类析构函数
- C++-明确何时以及如何调用析构函数
- 使用基类指针创建对象时,缺少派生类析构函数
- 在c++中使用向量时,如何调用构造函数和析构函数
- 重载运算符new[]的行为取决于析构函数
- 我需要知道编译器如何在cpp中使用析构函数
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 析构函数调用
- 通过引用传递-为什么要调用这个析构函数
- 对具有动态分配的内存和析构函数的类对象的引用
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- C++成员的析构函数顺序与shared_ptr
- C++ 防止在映射中放置()时调用析构函数
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- 调用析构函数以释放动态分配的内存
- 不命名构造函数和析构函数上的类型错误