我正在尝试创建一个动态分配的数组,该数组在填充时会创建一个足够大的新数组,以容纳所有数据并将旧数组中的所有值复制到新数组中。我在我的append函数中做了一个动作,当它被动态地分配一个新的数组并指向它的tmp时,然后将值从arr [i]移动到tmp [i]。但是,我想知道在完成它之后是否需要删除tmp?因为当我尝试在不删除tmp的情况下打印数组的内容时,它打印得很好,但是当我删除tmp时,事情开始变得很奇怪,并且内容不再以他们应该的方式打印。这里是我的代码:创建动态分配的数组
ArrayList::ArrayList(int initsize): last(0), size(initsize), origsize(initsize)
{
arr = new int[size];
}
ArrayList::ArrayList()
{
last = 0;
size = 16;
origsize = 16;
arr = new int[size];
}
void ArrayList::append(int value)
{
if (last<size) {
arr[last] = value;
}
last++;
if (last == size) {
int* tmp = new int[size+origsize];
int i = 0;
for (i=0; i<(size+origsize); i++)
tmp[i] = arr[i];
size = size+origsize;
arr = tmp;
arr[last] = value;
//delete tmp;
}
}
只要确保你删除在正确的地方。您的评论会删除'tmp',但我认为您应该在'arr = tmp'行之前删除'arr'。 – Sjlver
......我认为这是学术性的,因此把整个事情抛出来用于'std :: vector'是不可能的。 –
WhozCraig