2013-05-17 5 views
0

의 각 반복에 대해, 구조에 대한 포인터를 메모리를 해제하려면 코드에 다음과 같은 장소에 참여했다어떻게 구조를 가지고 루프

typedef struct { 
    unsigned ccc; 
    unsigned ddd; 
    unsigned aaa; 
    unsigned bbb; 
    string ddd; 

} objinfo; 

:

objinfo obj_tmp 
multimap<string, objinfo> obj_map; 
multimap<string, objininfo>::iterator it; 
std::pair<multimap<string, objinfo>::iterator, multimap<string,objinfo>::iterator> Krange; 

각 루프 나는 오래된 objinfo, obj_map을 던져서 새로운 객체 정보를 대체해야 할 것이다. obj_map.clear()를 사용하여지도를 정리할 수 있습니다.

구조체, 포인터 및 이전 객체에 대한 맵과 관련된 메모리를 해제하려면 어떻게해야합니까? 각 루프 이후에 ?

+3

정말 구조에 대한 메모리 할당 방법에 따라 다릅니다. 구조체가 스택 상에있을 수 있으므로 수동 메모리 관리가 필요 없습니다. –

+0

자동 개체 및 메모리 관리를 사용하면 자동으로 수행됩니다. –

+0

고마워요! 내 이해는 objinfo obj_tmp로 개체 구조체를 선언하면 스택에있다. 하지만 "new"를 사용하면 "delete"(힙에 있음)와 쌍을 이루어야합니다. 맞습니까? 그럼 포인터에 대해서? 그 메모리는 또한 각 루프 (루프 내에서 내 선언을 모두 가정) 이후에 출시됩니까? – user1830108

답변

2

multimap::clear()을 호출하면 멀티 맵에서 각 요소의 소멸자가 호출됩니다. 따라서 요소가 포인터가 아닌 한 객체는 파괴되고 메모리는 해제됩니다. 멀티 맵에서 요소로 포인터가있는 경우 multimap::clear()에 전화하기 전에 각 항목에 delete으로 전화해야합니다. (당신이 객체의 소유자라고 가정).

0

공유 한 코드를 기반으로하면 개체가 범위를 벗어나는 것이 필요합니다. 소멸자가 자동으로 실행되어 모든 것을 정리합니다. 따라서 기본적으로 아무 것도 할 필요가 없습니다. :-)

해당 수동 삭제 (예 : new 또는 malloc)가 필요한 개체를 수동으로 만들지 않았기 때문에이를 말합니다.

관련 문제