0

std::vector<A *>을 선언하면 메모리는 어디에 할당됩니까? new 동적으로 메모리를 할당하지만 벡터에 대한 메모리는 정적으로 할당되어야합니다. 나는 기억이 어떻게되는지 알고 싶다.다음 코드에서 메모리는 어디에 할당됩니까?

typedef std::vector<A *> AArray; 

    void myFunction() 
    { 
     AArray aarray; 
     aarray.push_back(new A()); 
     aarray.push_back(new A()); 
    } 
+0

STL 데이터 구조는 "정적"메모리를 사용하지 않습니다. –

답변

0

AArray aarray;은 스택에 메모리를 할당합니다.

aarray.push_back(new A());A을 힙에 구성한 다음 컨테이너에 배치 할 포인터를 반환합니다.

+1

이것이 내가 알고 싶었던 것입니다. 감사합니다! :) – GreatDane

+3

첫 문장은 오해의 소지가 있습니다. 그것은 포인터의 배열을 관리하기 위해 몇 가지 변수에 대해 작은 양의 스택을 할당합니다. 배열 자체가 동적으로 할당됩니다. –

2

std::vector은 할당 된 데이터를 변경할 수 있어야하므로 내부적으로 할당 된 배열 (이 경우 (A *) [])을 유지합니다. 이 배열은 (동적으로) 힙에 할당됩니다.

0

이렇게하면 myFunction()이 호출 될 때마다 메모리 누수가 발생합니다. 변수 aarraymyFunction()에 국부적으로 할당되며 정적으로 할당되므로 함수에서 컨트롤이 반환 되 자마자 소멸됩니다. 그러나 클래스 A의 두 객체는 ​​동적으로 생성되며 C++에서 자동으로 삭제되지 않습니다. 이 오브젝트를 삭제하려면 delete을 사용해야합니다. 코드에서 개체를 삭제하지 않았으므로이 두 개체는 메모리에서 참조되지 않고 남아있어 메모리 누수가 발생합니다.

+0

경고 해 주셔서 감사합니다. 내 프로젝트에서 비슷한 코드 조각이 있었고 스택 메모리 할당 해제 문제가있었습니다. 나는이 문제를 해결했다. 그러나 나는 여전히 그런 경우에 어떻게 메모리가 관리되는지 알고 싶었다. 실제 코드는 매우 다르며'myFunction'에 할당 된 메모리는 나중에 사용되어 참조되었습니다. – GreatDane