我出于学校目的,我自己使用模板对动态分配的数组进行了处理。
虽然我要问的是什么,我不知道如何以及为什么,我已经达到了我需要知道的程度。
template <typename TElement>
DynamicArray<TElement>::ensureCapacity () {
if (capacity >= elemNumb) {
return; //we have space to store the values
}
//we need to allocate more space for the values
TElement *auxArray = myArray;
//create space to hold more numbers
capacity = capacity * 2;
myArray = new TElement[capacity];
//copy the values
for (int i = 0; i < size; i++) {
myArray[i] = auxArray[i];
}
//release the memory
delete[] auxArray;
}
我需要知道:TElement *auxArray = myArray;
这是如何工作的?它是否使用指针,是逐个复制的元素?我需要了解它是如何工作的,以便我可以弄清楚算法的复杂性。我不介意,如果有人告诉我复杂性,但我正在寻找的真正答案是如何工作的?
另外myArray = new TElement[capacity];
我在删除旧版myArray
之前执行此操作会删除旧版本吗?或者它仍然以某种形式漂浮在记忆中的某个地方?
答案 0 :(得分:2)
此
TElement *auxArray = myArray;
只是意味着auxArray
指向myArray
指向的任何内容。没有复制任何其他内容,它只是一个指针副本。
此
myArray = new TElement[capacity];
表示myArray
现在指向一个新的,动态分配的TElement数组。表达式不会删除任何内容。但auxArray
指的是myArray
在此分配之前指向的内容,因此当您删除auxArray
时,会释放myArray
最初指向的资源。