2011-11-09 2 views
1
/* simple class that has a vector of ints within it */ 
class A 
{ 
public: 
    vector<int> int_list; 
}; 

/* some function that just returns an int, defined elsewhere */ 
int foo(); 

/* I want to fill the object's int_list up */ 
A a_obj; 

int main() { 
    for (int i = 0; i < 10; i++) { 
     int num = foo(); 
     a_obj.int_list.push_back(num); 
    } 
} 

범위는 num for 루프로 제한됩니까? for 루프가 종료되면 파손됩니까? a_obj에있는 번호에 액세스하려고 시도하면 int_list 안에있는 번호가 파괴되어서 못하게됩니까?내 변수의 범위와 관련하여 약간의 설명이 필요함

답변

5

num의 범위는 for 루프로 제한됩니까? for 루프가 종료되면

는 파괴됩니까?

반복 될 때마다 삭제 된 다음 다음 번에 다시 생성됩니다!

내가 숫자가 내부 파괴 된 것으로 할 수 없습니다 a_objint_list의 숫자에 액세스하려고하면

?

컨테이너는 복사본을 저장하므로 걱정할 필요가 없습니다.

참조 및 포인터에 대해서만 이러한 종류의 문제가 발생합니다.

+0

대단히 감사합니다. 그게 내가 필요한 것입니다. – martega

+0

@martega : 알아요 :) –

0

예, 루프 내에서 정의 된 변수 또는 { ... }의 블록은 해당 블록 내부에만 존재하며 블록을 떠날 때 파괴됩니다.

루프의 경우 블록이 반복 될 때마다 "생성"되므로 예에서 num은 이전 반복에서 참조 할 수 없습니다.

0

예, for 루프가 반복 될 때마다 스택에 num의 새 인스턴스가 만들어집니다. num의 값을 int_list에 전달하면 a_obj가 범위를 벗어날 때까지 저장됩니다.

1

num의 범위는 for 루프로 제한되어 있습니까? for 루프가 종료되면 파손됩니까?

예 : num이 for-loop에 국한되어 있기 때문에 가능합니다.

내가 숫자가 내부 파괴 된 것으로 내가 할 수 없습니다 a_obj의 int_list의 숫자에 액세스하려고하면

?

이 종료 할 때

아니, 목록 내부의 번호는 파괴되지 않습니다이의 말에 파괴됩니다 의미 당신이 목록에 번호를 복사하는 및 A a_obj;를 전역 범위에 선언되어 있기 때문에 루프에 대한 귀하의 프로그램.

관련 문제