[Modern C++] emplace

emplace

C++11부터 STL의 emplace를 지원한다.가변인자 템플릿을 사용해 객체 생성에 필요한 인자만 받는다. vector를 예로 들자면 push와 동일한 기능을 하나 동작은 다르다. vector를 기준으로 push_back의 동작원리는 다음과 같다.

  1. push_back 외부에서 rvalue 생성
  2. 이동 생성자를 통해 push_back 내부로 이동
  3. 임시 객체 삽입
  4. 외부의 임시 객체 소멸

그에 비해 emplace_back은 다음과 같이 동작한다.

  1. emplace_back 외부에서 매개변수 전달
  2. emplace_back 내부에서 임시 객체 생성
  3. 임시 객체 삽입

위와 같은 동작적 차이 외에도 concepture한 차이도 존재한다. emplace는 모든 유형의 생성자를 호출한다. 반면 push_back은 암시적 생성자만 호출한다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/21/Languages/Cplusplus/emplace/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.