C++ emplace_back
2023. 2. 3. 16:13ㆍProgramming/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);
}
};
반응형
'Programming > JAVA, C++, Go, Rust' 카테고리의 다른 글
C++ inline variable (0) | 2023.02.09 |
---|---|
C++ cast들 (static_cast, reinterpret_cast, dynamic_cast, const_cast) (0) | 2023.02.09 |
C++ 대입연산자의 virtual 사용 (0) | 2023.01.29 |
미래지향적인 C++ 프로그래밍 (0) | 2023.01.29 |
C++ 헤더 내 구현 장/단점 (0) | 2023.01.27 |