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;これはどのように機能しますか? ポインタを使用していますか、要素は1つずつコピーされていますか? アルゴリズムの複雑さを理解できるように、それがどのように機能するかを理解する必要があります。誰かが私に複雑さを教えてもかまいませんが、私が探している本当の答えはそれがどのように機能するかです?

また、古いものmyArray = new TElement[capacity];を削除する前にこれを行いますが、古いものは削除さmyArrayれますか? それとも、何らかの形でメモリのどこかにまだ浮かんでいますか?

4

1 に答える 1

2

これ

TElement *auxArray = myArray;

単にそれが指しているものはauxArray何でもmyArray指していることを意味します。他に何もコピーすることはなく、単なるポインタコピーです。

これ

myArray = new TElement[capacity];

myArrayこれは、動的に割り当てられた新しいTElement配列を指すようになったことを意味します。式は何も削除しません。ただし、はこの割り当ての前にauxArray指していたものを指しているため、を削除すると、元々が指していたリソースが解放されます。myArrayauxArraymyArray

于 2012-06-10T16:53:30.340 に答える