반응형

std::vector 2

std::vector reallocation과 noexcept move constructor

C++에서 move constructor를 작성할 때 noexcept를 붙여야 하는지 고민되는 순간이 있습니다.단순히 “예외를 던지지 않으니까 붙인다” 정도로만 이해하면 std::vector 같은 container에서 중요한 성능 차이를 놓칠 수 있습니다.std::vector는 capacity가 부족해져 reallocation이 발생하면 기존 element를 새 memory buffer로 옮겨야 합니다.이때 move constructor가 noexcept인지 여부는 기존 element를 move할지 copy할지 결정하는 중요한 힌트가 됩니다. std::vector reallocation에서 noexcept move constructor는 “이 객체는 안전하게 move해도 된다”는 신호가 됩니다. move..

C++/Concepts 2026.07.27

C++ push_back과 emplace_back 차이

std::vector에 object를 넣을 때 push_back과 emplace_back 중 무엇을 써야 하는지 자주 고민하게 됩니다.많은 글에서 emplace_back이 더 빠르다고 설명하지만, 실무 코드에서는 이 문장만 기억하면 오히려 잘못된 선택을 하기 쉽습니다.emplace_back은 magic optimization이 아니라 container 내부에서 object를 직접 construct할 수 있게 해주는 API입니다. push_back과 emplace_back의 차이는 빠르고 느림보다, 이미 만들어진 object를 넣는가 아니면 container 안에서 바로 만들 것인가에 있습니다. 이번 글에서는 C++17 기준으로 push_back과 emplace_back이 어떤 상황에서 copy, move..

C++/Concepts 2026.07.09
반응형