push_back, emplace_back

push_back 으로 임시객체를 넣을 경우 임시객체의 생성과 소멸이 있다.
emplace_back 으로 임시객체를 넣을떄도 마찬가지
emplace_back을 효율적으로 쓰기 위해선 기존 객체를 move로 넣거나 생성자 인자를 변수로 넣어줘야 한다.

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. class Data
  8. {
  9. string _name;
  10.  
  11. public:
  12.  
  13. Data(const string& name) : _name(name)
  14. {
  15. cout << "Data():" << _name << endl;
  16. }
  17. Data(const Data& rhs)
  18. {
  19. cout << "Data(const Data&):" << _name << ":" << rhs._name << endl;
  20. }
  21. Data(Data&& rhs)
  22. {
  23. _name = move(rhs._name);
  24. rhs._name = "null"; // for test
  25. cout << "Data(&&):" << _name << endl;
  26. }
  27. ~Data()
  28. {
  29. cout << "~Data():" << _name << endl;
  30. }
  31. };
  32.  
  33. int main()
  34. {
  35. cout << "push_back temporary object" << endl;
  36. {
  37. vector<Data> v;
  38. v.push_back(Data("test"));
  39. }
  40. getchar();
  41.  
  42. cout << "emplace_back temparory object" << endl;
  43. {
  44. vector<Data> v;
  45. v.emplace_back(Data("test"));
  46. }
  47. getchar();
  48.  
  49. cout << "emplace_back forward argument" << endl;
  50. {
  51. vector<Data> v;
  52. v.emplace_back("test");
  53. }
  54. getchar();
  55.  
  56. return 0;
  57. }

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다