如何在析构函数中删除C++中动态分配的数组?

How to delete dynamically allocated array in destructor in C++?

本文关键字:动态分配 数组 C++ 删除 析构函数      更新时间:2023-10-16

在此处输入图像描述

如您所见,析构函数抱怨"使用未声明的标识符'a'

我的阵列是否超出范围?调用析构函数时如何删除它?

a必须是类的成员变量。正如你现在拥有的那样,它是一个本地的

>a需要是hashtable的数据成员才能正常工作。现在它是构造函数的本地变量,因此当构造函数终止时,内存分配会泄漏。

但是,即使您纠正了此问题,也要注意五法则:如果实现以下任何一项,则需要实现或删除所有方法:

  • 破坏者
  • 复制构造函数
  • 复制赋值运算符
  • 移动构造函数
  • 移动赋值运算符

如果您不这样做,编译器将为您生成它们,在这种情况下会弄错它们。 仅仅将指针值复制到新对象是不够的;需要进行新的分配并复制内容(移动的情况除外(。 编译器生成的版本将导致释放后使用或双重删除。

您可以通过使用std::vector<int>而不是尝试管理自己的内存来避免所有这些。