我正在嘗試創建一個動態分配的數組,該數組在填充時會創建一個足夠大的新數組,以容納所有數據並將舊數組中的所有值複製到新數組中。我在我的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