c++ - 删除包含重复项的动态指针数组

标签 c++ arrays duplicates delete-operator

在这里释放内存的正确方法是什么? 指针数组包含重复项!

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/

相关文章:

函数不接受 c++ 参数

c++ - 在 C++11 中有条件地实现虚方法

C++ 特殊字符

python - 在 Python 中设置分区

bash - 使用命令行工具计算排序序列中的重复项

java - 查找数组中的重复值

sql - 删除SQL中除第一条记录外的重复记录

c++ - &vec[0] 是否为 std::vector vec 定义了行为?

无法使用数组创建 C 函数

c - 指针和字符数组