2013-05-28 1 views
2

기본적으로 프로그램은 정상적으로 실행되지만 main()에서 명시 적으로 h.clear()를 호출해야하며, 선언시 항상 호출되어야합니다 지도 변수의C++에서 map 변수의 clear() 함수 호출 요구 사항

map <int , long long> h; 
long long f(int n) 
{ 
    . 
    . 
    . 
} 
int main() 
{ 
    long long int t,n,x; 
//Should I explicitly invoke h.clear() here? 
} 

답변

1

코드가 실제로이 경우지도가 비어 있습니다.

이 fetchSomeVar이 주 전에 호출 및지도를 수정하는 일이 있지만, 이러한 구조는 피해야한다

map <int , long long> h; 

int fetchSomeVar() 
{ 
    h[ 0 ] = 0; 
    return 0; 
} 

int someVar = fetchSomeVar(); 


int main() 
{ 
    //... 
} 

같은 이국적인 경우에 비어있을 수 있습니다.

+0

변수가 say : main() 내에서 선언 된 경우 (즉, 전역 변수가 아닌 경우) 생성시 비어 있습니까? –

+0

예, 전역 변수가 아니기 때문에 범위에 들어갈 때만 초기화됩니다. – stijn

+0

감사합니다. 도와 주셔서 정말 고맙습니다. 나에게도 그러한 정보를 조회 할 수 있도록 일부 참조를 제안 할 수 있습니까? –

0

지도는 파괴되지만 주 완료 후에야 파괴됩니다. main의 끝에 clear()을 호출하면 다른 전역의 소멸자 (동일한 번역 단위에 있어야 함)가 h을 참조하는 경우에만 프로그램에 영향을 미칩니다.

2

clear()을 호출하지 않아도되지만 필요하지 않습니다. 소멸자는 정리를 처리하고지도에서 사용하는 메모리를 내부적으로 해제합니다.

당신이 main 종료에 파괴됩니다 다른 글로벌 객체가 맵이 비어 있다는 사실에 의존 것으로 예상 경우에만지도를 지워야합니다 (나쁜 생각처럼 보이는,하지만 누가 알 겠어 ...)

+0

도움을 주셔서 감사합니다. 실제로 map 변수의 파괴를 인식하지 못했지만 실제로 이러한 변수 초기화에 대해 묻고있었습니다. –