0

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

虽然我要问的东西有效,但我不知道如何以及为什么,我已经达到了我需要知道的地步。

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会删除旧的吗?还是它仍然以一种或另一种形式漂浮在内存中的某个地方?

4

1 回答 1

2

这个

TElement *auxArray = myArray;

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

这个

myArray = new TElement[capacity];

意味着myArray现在指向一个新的、动态分配的 TElement 数组。该表达式不会删除任何内容。但是auxArray是指向myArray这个分配之前指向的东西,所以当你删除时auxArray,你释放了最初指向的资源myArray

于 2012-06-10T16:53:30.340 回答