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: ;
는 메모리에 벡터 체류하거나 삭제할 수 있습니까?
가 goto''에 질문 특정 또는 종료의 방법에 대해 그것입니다 : 변수는이이 방법을 종료하는 경우에도 보장 범위를 벗어나 따라서 소멸자가 호출 (메모리가 해제)한다 닫는'}'에 도달하는 것 이외의 다른 블록? 예를 들어, 루프의 중간에있는'return' 문에 대해, 또는 예외를 던지면, 그때 무슨 일이 벌어 졌는지 이미 알 수 있습니까? – hvd
첫 번째 for 루프를 더 자세히 살펴보면 외부 for 루프에서 로컬이기 때문에 그 벡터는 여러 번 "삭제"됩니다. 'for (i ...')를 반복 할 때마다'v' 벡터가 파괴되고 생성됩니다. – PaulMcKenzie