2015-06-14 93 views
0

所以...我已经实现了exendible哈希的一个版本...我现在的问题是析构函数。可扩展哈希 - 析构函数C++

我在Hash类中使用了一个指向数组Bucket的指针数组。问题是在同一个存储桶中可能有多个指针。

在Hash类的析构函数中,我必须删除每个存储桶然后删除数组,但我必须小心不要删除同一个存储桶两次(我认为这会导致错误)。为了做到这一点,我使用了一个bool向量来记忆存储桶是否已经被删除。

我现在的问题是:有没有办法知道一个存储桶是否已经被删除而没有使用更多的存储器(布尔向量)? LE:我使用nullptr解决了析构问题(似乎现在正在工作),但是......另一个问题是:我怎样才能精确地遍历每个桶(例如,查找最小和最大元素) 。我不能使用nullptr这段时间(指针需要保持他们在哪里 - 在桶)

+1

也许考虑使用'std :: shared_ptr'?它使用每个objet的2-3个字的内存和共享状态,但这对于简单性和安全性来说往往是一个很好的折衷。 – tux3

+0

在正常操作期间遇到同样的问题。所以,只需'shared_ptr'并完成它。 –

+0

感谢您的快速回复...嗯,这是一个单一的项目,我真的不允许使用std :: shared_ptr ... –

回答

0

只是反复使用擦除功能

while (size()) 
{ 
    erase(begin()); 
} 
+0

你是什么意思?我有删除指针[我]; ...其中指针[i]是指针之一。但是,如果我删除它,然后稍后(让我们说指针[j]其中j>我)我不得不再次删除它,我不能(因为我已经删除它,指针[j]指向不存在的东西了 –

+0

我只是觉得我应该删除这个存储桶,然后把这个存储桶上显示的所有指针设置为NULL。这是个好主意吗? 还有另外一个问题...我怎样才能浏览(用Google翻译翻译它。 。如果是错误的动词,则应予以考虑:D)每个桶恰好1次(例如,查找最小和最大元素) –

+0

在编写yde destuctor之前,删除了evetything,找出一个删除函数以删除只有一个 –

0

我在哈希类的阵列中使用指向类Bucket的桶 的指针。问题是可以有多个指针 同一个存储桶。

我现在的问题是:有没有办法知道一个存储桶是否已经被删除而不使用更多的存储器(布尔向量)?

确定使用参考计数。将一个整数成员变量放入Bucket类中,初始化为零。每当你创建一个指向该Bucket对象的指针时,就增加整数。每当你使一个指向Bucket的指针无效时(也就是说,每当你对该指针调用delete时),就减少整型成员变量。如果该递减导致整数变为零,那么您知道Bucket没有指向它的指针,因此删除Bucket。

+0

好主意...但使用nullptr似乎更容易:D ...显然它的工作 –