>source

이 질문이 중복될 가능성이 높지만 이에 대해 적절한 검색을 수행하는 방법을 몰랐습니다. 또한 당신에게는 사소할 수 있지만 초보자인 저에게는 많은 도움이 될 것입니다!

3개의 클래스가 있고 각 클래스에는 컨테이너가 있습니다.

class A {
    std::map<int, B> container1;
};
class B {
    std::unordered_map<int, C> container2;
};
class C {
    std::vector<int> container3;
};

클래스 A에서 생성된 객체 'a'가 있고 container1/2/3이 모두 데이터로 채워져 있는 경우 제 질문은 다음과 같습니다.

  1. a.container1.clear()를 호출하면 container2 및 container3에 할당된 모든 메모리가 해제됩니까? 그렇다면 C++는 내부적으로 이 작업을 어떻게 수행합니까?
  2. 'a'의 소멸자가 호출되면 container2와 3이 해제되나요?
  3. 1과 2가 참이면 컨테이너의 중첩 조합에 적용됩니까? 예를 들어 여기에 map->unordered_map->벡터. 다른 조합은 vector->unordered_map->지도.

내 직감은 그것들이 모두 사실이라는 것입니다. 그렇지 않고 매우 깊이 중첩된 구조가 있는 경우 맨 아래로 이동하여 명시적으로 메모리를 해제하는 것은 의미가 없습니다.

답변을 뒷받침하는 문서를 제공해 주시면 정말 감사하겠습니다! 미리 감사드립니다!

jleng2022-01-12 19:27:09

답변이 아니라 C++에서 이러한 상황을 처리하는 방법에 대한 일반적인 설명입니다. RAII(Resource Acquisition is Initialization)가 여기에서 키워드입니다. 개체가 메모리를 할당하면 그에 대해 책임을 진다는 말이 이상합니다. 이 경우 컨테이너는 모두 표준이며 RAII 규칙을 따릅니다. 따라서 할당한 메모리를 해제합니다. RAII는 매우 중요합니다. 자세히 읽어보십시오. 장기적으로 많은 도움이 될 것입니다.

sbecker2022-01-12 19:27:09
  • 이전 python : Django -Model의 ImageField 속성과 관련된 파일 삭제
  • 다음 C#에서 image/png로 application/octet-stream