动态空间分配在这个算法中实际上如何工作?

时间:2012-06-10 16:49:41

标签: c++ dynamic-arrays dynamic-allocation

我出于学校目的,我自己使用模板对动态分配的数组进行了处理。

虽然我要问的是什么,我不知道如何以及为什么,我已经达到了我需要知道的程度。

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之前执行此操作会删除旧版本吗?或者它仍然以某种形式漂浮在记忆中的某个地方?

1 个答案:

答案 0 :(得分:2)

TElement *auxArray = myArray;

只是意味着auxArray指向myArray指向的任何内容。没有复制任何其他内容,它只是一个指针副本。

myArray = new TElement[capacity];

表示myArray现在指向一个新的,动态分配的TElement数组。表达式不会删除任何内容。但auxArray指的是myArray在此分配之前指向的内容,因此当您删除auxArray时,会释放myArray最初指向的资源。