아래 코드를 사용하여 벡터에 요소를 추가하면 foo를 호출 할 때 vec의 요소 (자동 변수)가 해당 요소의 범위에서 소멸되었습니다 생성 된 끝.컨테이너에 루프에 요소 추가하기 (평생)
std::vector<A> vec;
for (int i = 0; i < n; i++) {
A a;
vec.push_back(a);
}
foo(vec);
내 질문은 이러한 문제에 대한 교과서 솔루션은
아래 코드를 사용하여 벡터에 요소를 추가하면 foo를 호출 할 때 vec의 요소 (자동 변수)가 해당 요소의 범위에서 소멸되었습니다 생성 된 끝.컨테이너에 루프에 요소 추가하기 (평생)
std::vector<A> vec;
for (int i = 0; i < n; i++) {
A a;
vec.push_back(a);
}
foo(vec);
내 질문은 이러한 문제에 대한 교과서 솔루션은
아니, vec
의 요소가 a
의 다른 사본이 될 것입니다 무엇인지 지금이다.
그러나, 당신은 당신이 사용하는 다른 operator[]
를 사용하거나하려는 경우 vec
의 크기를 할당해야 vec.push_back()
:
에도 push_back()
불구하고이 같은 인수를 취합니다
for (int i = 0; i < n; i++) vec.push_back(A());
EDIT (질문 변경 후)
참조, 내부적으로 그것의 사본을 만들 것입니다. 복사본을 내부적으로 저장하기 전에 불필요한 복사본을 만드는 것을 피하기 위해 참조로 인수를 취합니다.왜? 그들은 참조로 전달됩니다 – user695652
아니요, 할당은'a'의 사본을 만듭니다. – hmjd
혼란스럽게해서 죄송 합니다만, 예를 vec.push_back (a)로 변경했습니다; – user695652
스택 변수에 대해 걱정할 필요가 없습니다. std :: vector에서 value를 push하면이 컨테이너는 변수의 heap copy를 생성합니다. 따라서, 여러분이 살고있는 모든 변수가 존재할 것입니다.
당신은 그냥 변수의 값을하자 세계로 당신의 루프에서 변수를 정의하고 다시 밀어 수
그것의 당신이 당신의 원본 코드가 – mathematician1975
무엇을 참조 답이있는 질문을 수정하는 장난 꾸러기 조금 예, 미안하지만 push_back 함수를 사용하면 문제가 더욱 명확 해집니다. – user695652
왜 downvoted ?? – user695652