emplace
C++11부터 STL의 emplace를 지원한다.가변인자 템플릿을 사용해 객체 생성에 필요한 인자만 받는다. vector를 예로 들자면 push와 동일한 기능을 하나 동작은 다르다. vector를 기준으로 push_back의 동작원리는 다음과 같다.
- push_back 외부에서 rvalue 생성
- 이동 생성자를 통해 push_back 내부로 이동
- 임시 객체 삽입
- 외부의 임시 객체 소멸
그에 비해 emplace_back은 다음과 같이 동작한다.
- emplace_back 외부에서 매개변수 전달
- emplace_back 내부에서 임시 객체 생성
- 임시 객체 삽입
위와 같은 동작적 차이 외에도 concepture한 차이도 존재한다. emplace는 모든 유형의 생성자를 호출한다. 반면 push_back은 암시적 생성자만 호출한다.