2017-11-23 9 views
0

일반적으로 종료 할 때 루프 내부에서 선언 된 변수가 삭제됩니다. 예를 들어 :goto로 프로그램을 종료하면 로컬 변수가 삭제됩니까?

for(int i=0; i<10; i++) 
{ 
    vector <int> v; 
    for(int j=0; j<1000000; j++) v.push_back(j); 
} 

백만의 크기와 벡터를 만들에도 불구, 메모리는 루프 후 무료입니다. 우리는이 같은 STH 경우

:

for(int i=0; i<10; i++) 
{ 
    vector <int> v; 
    for(int j=0; j<1000000; j++) v.push_back(j); 
    goto after_for; 
} 
after_for: ; 

는 메모리에 벡터 체류하거나 삭제할 수 있습니까?

+3

가 goto''에 질문 특정 또는 종료의 방법에 대해 그것입니다 : 변수는이이 방법을 종료하는 경우에도 보장 범위를 벗어나 따라서 소멸자가 호출 (메모리가 해제)한다 닫는'}'에 도달하는 것 이외의 다른 블록? 예를 들어, 루프의 중간에있는'return' 문에 대해, 또는 예외를 던지면, 그때 무슨 일이 벌어 졌는지 이미 알 수 있습니까? – hvd

+0

첫 번째 for 루프를 더 자세히 살펴보면 외부 for 루프에서 로컬이기 때문에 그 벡터는 여러 번 "삭제"됩니다. 'for (i ...')를 반복 할 때마다'v' 벡터가 파괴되고 생성됩니다. – PaulMcKenzie

답변

0

삭제됩니다.

for(int i=0; i<10; i++) 
{ 
    vector <int> v; 
    for(int j=0; j<1000000; j++) v.push_back(j); 
    throw std::runtime_error("xyz") ; 
} 
0

더 이상 유효하지 않으므로 삭제됩니다.