push_back 으로 임시객체를 넣을 경우 임시객체의 생성과 소멸이 있다.
emplace_back 으로 임시객체를 넣을떄도 마찬가지
emplace_back을 효율적으로 쓰기 위해선 기존 객체를 move로 넣거나 생성자 인자를 변수로 넣어줘야 한다.
#include <iostream> #include <string> #include <vector> using namespace std; class Data { string _name; public: Data(const string& name) : _name(name) { cout << "Data():" << _name << endl; } Data(const Data& rhs) { cout << "Data(const Data&):" << _name << ":" << rhs._name << endl; } Data(Data&& rhs) { _name = move(rhs._name); rhs._name = "null"; // for test cout << "Data(&&):" << _name << endl; } ~Data() { cout << "~Data():" << _name << endl; } }; int main() { cout << "push_back temporary object" << endl; { vector<Data> v; v.push_back(Data("test")); } getchar(); cout << "emplace_back temparory object" << endl; { vector<Data> v; v.emplace_back(Data("test")); } getchar(); cout << "emplace_back forward argument" << endl; { vector<Data> v; v.emplace_back("test"); } getchar(); return 0; }