블로그
-
C++ 멀티스레드 간헐적 크래시: ThreadSanitizer로 데이터 레이스 찾고 mutex·atomic으로 고치기
싱글스레드에선 멀쩡하던 코드가 멀티스레드에서 간헐적으로 죽을 때, ThreadSanitizer로 데이터 레이스를 찾아내고 mutex·lock_guard·atomic 중 무엇으로 동기화할지, 데드락과 거짓 공유는 어떻게 피할지 예제로 설명합니다.
-
C++ use-after-move 버그: std::move가 캐스팅일 뿐인 이유와 이동 의미론 실수 10가지
std::move는 캐스팅일 뿐이라는 사실에서 출발해 이동된 객체를 다시 쓰는 use-after-move 버그, const 객체 이동, return에 std::move를 붙여 RVO를 막는 실수 등 이동 의미론 에러 10가지와 고치는 방법을 다룹니다.
-
C++ 람다 캡처로 생기는 dangling reference: 값 캡처·shared_ptr·[*this]로 수명 지키기
참조로 캡처한 지역 변수가 스코프를 벗어난 뒤 람다가 실행되면 dangling reference 크래시가 납니다. 값 캡처와 shared_ptr, [*this]로 수명을 지키는 방법과 비동기 콜백이나 람다 반환에서 자주 하는 캡처 실수를 예제로 다룹니다.
-
CMake Error 자주 나는 10가지: find_package 실패·target not found·캐시 오염 해결
find_package가 패키지를 못 찾거나 target not found, 버전 부족, 경로 공백, 오염된 빌드 디렉토리 때문에 CMake가 멈출 때, 에러 메시지별로 원인을 가려내고 CMakeLists.txt를 어떻게 고치면 되는지 수정 코드로 보여줍니다.
-
C++ 범위 기반 for문 no begin function 에러: 내부 변환과 커스텀 컨테이너 begin·end
for (auto x : c)에서 no begin function 에러가 나는 이유를 범위 기반 for문의 내부 변환으로 설명하고, 커스텀 컨테이너에 begin()·end()를 붙이는 법과 값 복사, 반복 중 수정, 임시 객체 순회 같은 실수 8가지를 고칩니다.
-
C++ auto 타입 추론 실수: 참조·const가 떨어지는 복사, vector<bool> 프록시, 중괄호 추론
auto가 참조와 최상위 const를 떼어 내 의도치 않은 복사가 생기는 문제부터 초기화 누락, vector<bool> 프록시, 중괄호 초기화 추론까지 auto 관련 에러 8가지를 짚고, auto&·const auto&·auto&&를 고르는 기준을 정리합니다.
-
C++ RVO와 NRVO: C++17 보장 복사 생략과 return std::move가 NRVO를 막는 경우
return 문에서 복사가 언제 생략되는지 RVO와 NRVO를 나눠 설명하고, C++17이 보장하는 복사 생략의 범위와 여러 반환 경로나 return std::move 때문에 NRVO가 깨지는 경우를 GCC로 직접 확인한 결과와 함께 보여줍니다.
-
C++ 가상 소멸자가 없을 때 생기는 누수: virtual·protected 소멸자 선택 기준
기반 클래스 포인터로 파생 객체를 delete했는데 파생 소멸자가 불리지 않아 메모리와 파일 핸들이 새는 이유를 보여주고, virtual 소멸자, 순수 가상 소멸자, protected 소멸자 중 언제 무엇을 쓰는지와 vtable 오버헤드를 설명합니다.
-
C++ 객체 슬라이싱 에러: vector<Base>에 담을 때 잘리는 이유와 clone 패턴
파생 객체를 기반 클래스 값으로 넘기거나 vector<Base>에 담는 순간 파생 멤버와 가상 함수 동작이 잘려 나가는 슬라이싱이 왜 생기는지 보여주고, 참조·스마트 포인터·clone() 패턴과 복사 생성자 delete로 막는 법을 다룹니다.
-
C++ 정적 초기화 순서 문제(Static Initialization Order Fiasco): 재현과 함수 내 static·constinit 해결
다른 .cpp 파일의 전역 객체가 아직 초기화되지 않은 상태에서 쓰여 크래시가 나는 Static Initialization Order Fiasco를 링크 순서만 바꿔 재현하고, 함수 내 static, constinit, Nifty Counter 같은 해결책을 비교합니다.