c++ - What's the differences between these two methods of dynamically expanding an array? -
these 2 methods trying dynamically expand array when needed.
method 1.
int size = 10; int count = 0; int number; int* intlist = new int[size]; in >> number; while (!in.fail()) { if (count == size) { size *= 2; int* temp = new int[size]; (int = 0; < count; i++) { temp[i] = intlist[i]; } delete[] intlist; intlist = temp; } intlist[count] = number; count++; in >> number; }
method 2
int size = 10; int count = 0; int number; int* intlist = new int[size]; in >> number; while(!cin.fail()) { if ( count == size ) { int* temp = intlist; intlist = new int[size*2]; ( int i=0;i<size; i++) intlist[i] = temp[i]; delete [] temp; size = size * 2; temp = null; } intlist[count] = number; count++; in >> number; }
what happens array temp after method 1 done? necessary free memory of temp
?
i tried delete[] temp;
, pointed null
messed intlist
.
your 1st example uses temp
hold newly created array, while 2nd code uses keep reference original array.
"what happens array temp after method 1 done?"
it's going referenced intlist
further.
in 1st case must not delete [] temp;
because leave without valid allocation.
in 2nd case intlist
pointer moved temp
, newly assigned allocation. temp
used deep copy contents, , deleted when done.
anyway should note (as mentioned in comments), beyond academical reasons research , learning, rather std::vector<int> intlist;
should used solve these kind of problems.