2012-07-11 5 views
-1

아래 코드를 사용하여 벡터에 요소를 추가하면 foo를 호출 할 때 vec의 요소 (자동 변수)가 해당 요소의 범위에서 소멸되었습니다 생성 된 끝.컨테이너에 루프에 요소 추가하기 (평생)

std::vector<A> vec; 
for (int i = 0; i < n; i++) { 
    A a; 
    vec.push_back(a); 
} 

foo(vec); 

내 질문은 이러한 문제에 대한 교과서 솔루션은

+1

그것의 당신이 당신의 원본 코드가 – mathematician1975

+0

무엇을 참조 답이있는 질문을 수정하는 장난 꾸러기 조금 예, 미안하지만 push_back 함수를 사용하면 문제가 더욱 명확 해집니다. – user695652

+0

왜 downvoted ?? – user695652

답변

2

아니, vec의 요소가 a의 다른 사본이 될 것입니다 무엇인지 지금이다.

그러나, 당신은 당신이 사용하는 다른 operator[]를 사용하거나하려는 경우 vec의 크기를 할당해야 vec.push_back() :

에도 push_back() 불구하고이 같은 인수를 취합니다

for (int i = 0; i < n; i++) vec.push_back(A()); 

EDIT (질문 변경 후)

참조, 내부적으로 그것의 사본을 만들 것입니다. 복사본을 내부적으로 저장하기 전에 불필요한 복사본을 만드는 것을 피하기 위해 참조로 인수를 취합니다.

+0

왜? 그들은 참조로 전달됩니다 – user695652

+0

아니요, 할당은'a'의 사본을 만듭니다. – hmjd

+0

혼란스럽게해서 죄송 합니다만, 예를 vec.push_back (a)로 변경했습니다; – user695652

0

스택 변수에 대해 걱정할 필요가 없습니다. std :: vector에서 value를 push하면이 컨테이너는 변수의 heap copy를 생성합니다. 따라서, 여러분이 살고있는 모든 변수가 존재할 것입니다.

0

당신은 그냥 변수의 값을하자 세계로 당신의 루프에서 변수를 정의하고 다시 밀어 수