我已經爲學校的目的使用模板自己動手分配的數組。動態空間分配在這個算法中如何實際工作?
雖然我即將問的作品,我不知道如何以及爲什麼,我已經達到了我需要知道的地步。
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
這是否刪除舊的?或者它仍然以某種形式在內存中的某處浮動?
澄清;你是說你寫了這段代碼,但是你不知道它是如何工作的? –
@OliCharlesworth Well ofc。 C++非常複雜。我對此沒有完全的理解。我可以很容易地做一些愚蠢的事情,比如創建500動態分配的數組,並且不需要取消分配它們並流暢地使用內存,但是我不知道,因爲500 * 10 int不是那麼大的內存(0.019 mb)。我感冒並沒有注意到,即使這是生與死的區別。 – Kalec
理解所有這些東西至關重要,但在真實代碼中,您應該優先使用指向動態分配對象的原始指針的智能指針。看看[C++ 11智能指針](http://en.wikipedia.org/wiki/Smart_pointer) – juanchopanza