-
Notifications
You must be signed in to change notification settings - Fork 2
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 메서드 호출과 이론적으로는 같은 효율을 보일 것으로 생각되니 마음에 드는 문법으로 사용하시면 되겠습니다. 저는 개인적으로 임플레이스 메서드가 괄호도 적고 의미도 명확해서 더 마음에 드네요.