C++ emplace_back

2023. 2. 3. 16:13Programming/JAVA, C++, Go, Rust

    목차
반응형
clss Item {
public:
    ...

private:
    uint32_t size;
    std::string name;
};


std::vector<Item> items;

items.push_back(Item(20, "item1"));

push_back은 객체를 복사하여 저장합니다. 즉, 입력으로 주어지는 임시객체는 복사된 뒤 바로 파괴됩니다.

반면에 emplace_back은 move 할당자가 정의되어 있을 시 이를 활용하여 임시객체를 move 한 객체를 저장합니다.
emplace_back을 사용해도 객체가 move 할당자를 정의하고 있지 않다면 push_back과 마찬가지로 객체 생성 후 복사를 수행합니다.

emplace_back을 효과적으로 사용하고자 한다면 다음과 같이 move assignment operator를 정의합니다.

class Item {
public:
    ...

    const Item &operator=(const Item &&rhs) {
        this->size = rhs.size;
        this->name = std::move(rhs.name);
    }
};
반응형