下面是构造函数和析构函数的代码。析构函数成功地破坏了由选项1创建的数组。如果我们在选项2中有多个数组怎么办。相同的析构函数编码是否足以删除或者需要更改代码。
#include "iostream"
class Mystack
{
private:
int capacity;
int top[3];
int *input;//option1
int *input[3];//option 2
public:
Mystack();
~Mystack();
void push(int stackNum, int elem);
void pop(int stackNum);
void display();
};
Mystack::Mystack()
{
capacity = 3;
top[3] = { -1 };
input[] = new int[capacity]; //option 1
input[3] = new int[capacity];// option 2
}
Mystack::~Mystack()
{
delete[]input;// Works for option 1. Should it be same for option 2??
}
答案 0 :(得分:1)
您的int *input[3]
是一个原始数组,其中包含指向整数的指针,a.k.a int*
。您的代码中有很多错误,例如您正在使用top[3]
访问数组 top 的第4个位置,其中只有3个元素,并且您正在分配{{1它想象中的第4个元素,而不是int。
这些声明也无效,因为您对2个不同的变量使用相同的标识符:
{ -1 }
如果你想删除一个指针数组分配的内存,我会每次int *input;//option1
int *input[3];//option 2
遍历数组调用:
delete []
这将释放指针分配给整数for(int i=0; i<3; i++)
delete [] input[i];
,input[0]
和input[1]
的所有内存。