2017-01-10 1 views
-1

어리석은 질문입니다.하지만 형이상학 적 의심을 가지고 있습니다.새 항목 인스턴스를 std :: vector에 안전하게 추가하십시오.

객체를 벡터로 푸시 할 때 객체를 미리 업데이트 할 필요가 없다고 가정 할 때 로컬 변수 사용을 피할 수 있습니까?

void addToVector(std::vector<Foo>& fooVector) 
{ 
    // Solution #1 
    Foo foo; 
    fooVector.push_back(foo); 
    // Solution #2 
    fooVector.push_back(Foo()); 
} 

겠습니까 용액 # 2 누설 메모리는 로컬 변수가 범위 밖 않을 푸 캡슐화 있다는 것을 알고?

용액 # 1보다 더 효율적이다, 2 유효 용액 # 가정? (emplace_back 일 가능성이 있지만 여전히 C++ 03이 붙어 있습니다.)

+2

일반적으로는 동일합니다. 첫 번째 변수는 벡터에 복사되고 범위를 벗어나면 소멸되는 명명 된 변수를 만듭니다. 두 번째 구문은 벡터에 복사되고 명령문의 끝에서 소멸되는 이름이 지정되지 않은 임시 문자입니다. – Peter

+0

완벽한 답변, 감사합니다. – codeJack

답변

2

push_back은 항목을 벡터에 복사하므로 emplace_back이 가장 효율적이라고 말합니다.

임시 Foo()을 사용하면 누설이 발생하지 않습니다.

관련 문제