2010-07-28 3 views
-1

친구메모리 관리 + 컨테이너

컨테이너에는 자동 메모리 관리 메커니즘이 있습니다. 복사 생성자를 사용하여 값을 삽입 할 때 값을 제거하면 각 값에 대해 소멸자가 호출됩니다. no 요소를 읽은 후에는 어떤 스테이지의 염색기가 호출됩니까?

요소를 읽지 않고도 컨테이너 클래스가 메모리를 처리하는 방법은 무엇입니까? 명시 적 요소를 지울 때 컨테이너가 범위를 벗어나면

많은 감사

+1

이 질문은 현재의 형태에서 많은 이해가되지 않습니다, 당신은 명확하게 할 수 있습니까? 아마 몇 가지 코드를 추가하고 무슨 일이 일어나고 어떤 일이 일어날 것으로 예상하는지 설명하십시오. – Naveen

+0

이 질문은 나에게 의미가 없습니다. 어쩌면 당신이 의미하는 바를 보여주는 약간의 샘플 코드가 도움이 될 것입니다. –

+0

나를 이길 :) –

답변

1

컨테이너에는 메모리 관리 기능이 없으며 개체에는 메모리 관리 기능이 있습니다.

obj a; 
{ 
    std::vector<obj> b; 
    b.push_back(a);//copy of 'a' taken here 
}//copy of 'a' in vector destructed here because the copy goes out of scope not specifically the vector 

//'a' still exists 

대안으로

obj* a = new obj; 
{ 
    std::vector<obj*> b; 
    b.push_back(a); 
    b.push_back(new obj);//pointer of type obj taken here 
}//obj destructor not called 
//got a memory leak as the obj created still exists but has no reference 
delete a;//but can still delete a 
+0

매우 잘 설명되어 있습니다. 감사 – ronan

0

컨테이너의 개체가 소멸됩니다.

2

요소를 읽지 않고도 컨테이너 클래스가 메모리를 처리하는 방법은 무엇입니까?

아니요. 수행 할 메모리 처리가 없습니다.

개체를 만들 때 개체를 할당해야하며 개체가 소멸되면 메모리를 해제해야합니다.

기존 요소를 읽으면 아무 것도 만들지 않거나 삭제하지 않으므로 컨테이너가 아무 것도 할 필요가 없습니다.

+0

고마워 컨테이너가 범위를 벗어날 때 메모리가 해제됩니다. 또는 소거를 적용하면 소멸자가 호출됩니다. – ronan