2012-06-10 2 views
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 이전 버전을 삭제합니까? 아니면 여전히 메모리의 어딘가에 한 가지 형태로 떠있는 것입니까?

+4

명확히하기 위해; 당신은이 코드를 작성했다고 말하고 있지만, 어떻게 작동하는지 알지 못합니까? –

+0

@OliCharlesworth Well ofc. C++은 매우 복잡합니다. 나는 그것을 완전히 이해하지 못했다. 동적으로 할당 된 500 개의 배열을 만들고 할당을 해제하고 물통을 통과시키지 않고도 500 * 10 int가 그다지 램 (0.019 mb)이 아니기 때문에 쉽게 이해할 수없는 바보 같은 일을 쉽게 할 수 있습니다. 나는 차가운 삶과 죽음의 차이 일지라도 그것을 추측하지 못한다. – Kalec

+1

모든 것을 이해하는 것이 필수적이지만 실제 코드에서는 동적 포인터에 비해 스마트 포인터를 사용하여 동적으로 할당 된 객체를 선호해야합니다. [C++ 11 스마트 포인터] (http://en.wikipedia.org/wiki/Smart_pointer) – juanchopanza

답변

2

TElement *auxArray = myArray; 

그냥 auxArray 점은 무엇에 myArray가 가리키는 것을 의미한다. 그 밖의 다른 것들은 복사하지 않으며 단지 포인터 복사본 일뿐입니다.

myArray = new TElement[capacity]; 

myArray는 이제 새로운 동적 할당 TElement 배열을 가리키는 것을 의미한다. 표현식은 아무 것도 삭제하지 않습니다. 그러나 auxArray은이 할당 전에 myArray이 가리키고있는 것을 가리키고 있으므로 auxArray을 삭제하면 원래 myArray이 가리키는 리소스를 해제합니다.

+0

확인해보십시오. 모든 것에 대해 명확하게 설명되어 있습니다. 고맙습니다! – Kalec

+0

@Kalec 잘 듣고 있습니다. 그러면 다른 사람들이 귀하의 질문에 여전히 답이 없다고 생각하지 않도록 답변을 수락 할 수 있습니다. – juanchopanza

관련 문제