Skip to content

2014 07 03 컨테이너에 객체 추가하기

krikit edited this page Nov 26, 2014 · 1 revision

컨테이너에 객체 추가하기

기존에는 vector같은 컨테이너에 객체를 추가할 경우 복사가 일어나서 비효율적이었죠.

class MyClass {
 public:
  MyClass(int num, std::string val) : _num(num), _val(val) {}
 private:
  int _num;
  std::string _val;
};

int main(int argc, char** argv) {
  vector<MyClass> vec;
  vec.push_back(MyClass(1, "1"));    // rvalue 객체 생성 및 복제
}

C++11에서는 move 시멘틱스가 적용되어 복사가 일어나지 않아 비교적 효율적입니다. 또한, 아래와 같은 유니폼 초기화를 사용할 수도 있습니다.

vec.push_back({2, "2"});

그리고 대부분의 컨테이너들이 임플레이스 메서드를 지원합니다.

vec.emplace_back(3, "3");

임플레이스 메서드는 move 시멘틱스 및 가변 인자 템플릿을 이용해 구현되어 유니폼 초기화를 통한 push_back 메서드 호출과 이론적으로는 같은 효율을 보일 것으로 생각되니 마음에 드는 문법으로 사용하시면 되겠습니다. 저는 개인적으로 임플레이스 메서드가 괄호도 적고 의미도 명확해서 더 마음에 드네요.

Clone this wiki locally