반응형

RAII 4

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++ lock ownership 제대로 이해하기

C++에서 mutex를 직접 lock하고 unlock하는 코드는 짧아 보이지만, 예외나 early return이 끼어드는 순간 실수하기 쉽습니다.그래서 실무 C++에서는 mutex를 직접 관리하기보다 RAII object로 lock ownership을 관리하는 방식을 자주 사용합니다.대표적인 도구가 std::lock_guard와 std::unique_lock입니다.둘 다 scope가 끝날 때 unlock을 보장하지만, 사용할 수 있는 상황과 표현하는 의도는 다릅니다. std::lock_guard는 단순한 scope lock이고, std::unique_lock은 lock ownership을 상태로 들고 다니는 더 유연한 RAII lock object입니다. lock_guard와 unique_lock의 차..

C++/Concepts 2026.07.25

std::unique_ptr 제대로 이해하기

C++에서 동적 객체를 다루다 보면 포인터를 피할 수 없습니다.하지만 raw pointer를 직접 소유권 관리에 사용하면 delete 누락, 이중 해제, 예외 발생 시 자원 누수 같은 문제가 쉽게 생깁니다.이때 가장 먼저 익혀야 할 도구가 std::unique_ptr입니다. std::unique_ptr은 하나의 객체가 하나의 자원을 단독으로 소유한다는 의도를 코드로 표현하는 스마트 포인터입니다. 이번 글에서는 std::unique_ptr이 왜 필요한지, std::move와 어떤 관계가 있는지, 함수 인자로 넘길 때 어떤 기준을 잡으면 좋은지 코드 예제로 정리해보겠습니다. 1. unique_ptr은 무엇인가?std::unique_ptr은 C++ 표준 라이브러리가 제공하는 스마트 포인터입니다.핵심은 이름 그..

C++/Concepts 2026.06.18

RAII로 자원 관리 이해하기

C++을 실무에서 사용하다 보면 RAII라는 표현을 자주 만나게 됩니다.처음 보면 용어가 조금 어렵게 느껴질 수 있습니다.Resource Acquisition Is Initialization, 즉 “자원 획득은 초기화”라는 뜻입니다.하지만 핵심은 그렇게 복잡하지 않습니다. 자원을 객체가 책임지게 만들고, 객체가 사라질 때 자원도 자동으로 정리되게 만드는 방식입니다. 이번 글에서는 RAII가 왜 중요한지, 스마트 포인터와 어떤 관계가 있는지, 그리고 실무 C++ 코드에서 어떤 기준으로 봐야 하는지 정리해보겠습니다. 1. RAII는 무엇인가?RAII는 C++에서 자원을 안전하게 관리하기 위한 대표적인 패턴입니다.자원이라고 하면 메모리만 떠올리기 쉽지만, 실무에서는 훨씬 더 많은 것들이 자원입니다.자원 종류예..

C++/Concepts 2026.06.15
반응형