학교용으로 템플릿을 사용하여 동적으로 할당 된 배열을 직접 만들었습니다.동적 공간 할당이 실제로이 알고리즘에서 어떻게 작동합니까?
나는 작품에 대해 물어 보는 동안, 나는 어떻게 그리고 왜 그리고 내가 알 필요가있는 지점에 도달했는지 모른다.
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
이전 버전을 삭제합니까? 아니면 여전히 메모리의 어딘가에 한 가지 형태로 떠있는 것입니까?
명확히하기 위해; 당신은이 코드를 작성했다고 말하고 있지만, 어떻게 작동하는지 알지 못합니까? –
@OliCharlesworth Well ofc. C++은 매우 복잡합니다. 나는 그것을 완전히 이해하지 못했다. 동적으로 할당 된 500 개의 배열을 만들고 할당을 해제하고 물통을 통과시키지 않고도 500 * 10 int가 그다지 램 (0.019 mb)이 아니기 때문에 쉽게 이해할 수없는 바보 같은 일을 쉽게 할 수 있습니다. 나는 차가운 삶과 죽음의 차이 일지라도 그것을 추측하지 못한다. – Kalec
모든 것을 이해하는 것이 필수적이지만 실제 코드에서는 동적 포인터에 비해 스마트 포인터를 사용하여 동적으로 할당 된 객체를 선호해야합니다. [C++ 11 스마트 포인터] (http://en.wikipedia.org/wiki/Smart_pointer) – juanchopanza