STL에서 여러 컨테이너를 사용할때 push종류와 emplace 종류가 있다.
대표적인 STL 컨테이너인 Vector를 예를 들었을때 push_back과 emplace_back인데 이 둘은 결국
선언된 vector에 item을 넣는다는 것은 같다 하지만 중요한 차이가 있다.
중간에 임시 객체를 생성하여 이동생성자가 불려지는 것이다.
int main(){
vector<Item> m_vecItem;
std::cout << "excute push_back()" << "\\n";
m_vecItem.push_back(Item(1));
}
위와 같은 push_back을 사용한 코드가 있을 때
excute push_back()
일반 생성자 호출
이동 생성자 호출
소멸자 호출
소멸자 호출
그러면 위 같은 결과가 나온다.
emplace_back의 경우에는
int main(){
vector<Item> m_vecItem;
std::cout << "excute emplace_back()" << "\\n";
m_vecItem.emplace_back(1);
}
위와 같은 emplace_back을 사용한 코드가 있을 때