push_back

‘객체’를 집어넣는 형식, 즉 객체 없이 삽입하려면 임시 객체가 있어야 함.

사용과정

  1. push_back을 통해 객체를 삽입하기 위해, item 임시 객체를 하나 만듭니다.
  2. 임시 객체를 복사 생성자를 통해 push_back 함수 내에서 임시 객체를 만들어 냅니다.
  3. 함수내에 만들어진 임시 객체를 vector 의 끝에 추가합니다.
  4. 함수를 빠져나온 후, push_back에 삽입하기 위해 만들었던 (1번) item 임시 객체를 소멸시킵니다.

emplace_back

c++11 에서 도입된 함수, 가변인자 템플릿을 사용하여 객체 생성에 필요한 인자만 받은 후 함수 내에서 객체를 생성하여 삽입하는 방식, c++17이후에는 참조도 반환

사용방법

임시 객체를 만들 필요가 없기 때문에, emplace_back 내부에서 삽입에 필요한 생성자 한번만 호출 됩니다.

push_back 과 emplace_back 사용은 상황에 따라 다른 것이다. 뭐가 더 좋다는 것은 틀린 말이다.

emplace_back은 push_back에 비해 빠르지만 객체를 외부에서 생성하는 것이 아니라 위험할 수 있다. 축소변환, 암시적인 변환에 대해 막기가 힘이든다. 컴파일상에서는 문제가 없지만 런타임에서 의도치 않은 에러가 발생할 수 있다.