在这里释放内存的正确方法是什么? 指针数组包含重复项!
class HashTable
{
Bucket<E>** index = new Bucket<E>*[indexSize];
...
}
~ExtHash( )
{
for (size_t i = 0; i < indexSize; ++i)
delete index[i];
delete[] index;
}
最佳答案
我会好好想想,要不要让这个容器负责删除对象;将它们存储在别处会更简单,并且只使用这个容器来引用它们,而不是管理它们的生命周期。
或者,您可以使用 std::shared_ptr
来管理对象;然后当您丢弃所有它们时,它们将被自动删除。
如果你真的想这样做,你需要在删除每个重复项后删除重复项;像
for (size_t i = 0; i < indexSize; ++i) {
Bucket<E> * victim = index[i];
indexSize = std::remove(index+i+1, index+indexSize, victim) - index;
delete victim;
}
[注意:这段代码很可能是错误的;我当然犯了一些错误。如果你真的想用困难的方式管理动态对象,那么你需要彻底测试它]
关于c++ - 删除包含重复项的动态指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10245876/