블로그
-
C++20 std::jthread: 자동 join과 stop_token으로 스레드 협조적 중단하기
C++20 std::jthread가 소멸 시 자동으로 join하는 방식과 stop_token·stop_source·stop_callback으로 스레드를 협조적으로 중단하는 방법을 std::thread와 비교하고, 중단 체크 누락이나 detach 같은 실수를 예제로 짚습니다.
-
static·extern·const·constexpr·inline·volatile·mutable: C++ 키워드가 실제로 바꾸는 것
C++ 주요 키워드 정리. static, extern, const, constexpr, inline, volatile, mutable의 의미와 사용법, 링키지와 저장 기간, 메모리 레이아웃, 키워드 조합 패턴을 다룹니다.
-
C++ 람다 참조 캡처 심화 — 수명 의미론, 캡처 규칙, ASAN, 실무 안전 패턴
참조 캡처([&]) 수명·댕글링, 캡처 목록 해석·이름 조회, IIFE와 참조, ASAN 검출 패턴, 프로덕션 안전 설계를 컴파일러 모델 관점에서 정리합니다. 값 캡처([x])는 클로저 객체 안에 복사본을 두므로, 외부 스코프가 끝난 뒤에도 그 복사본은 클로저 수명에 묶입니다.
-
C++ 객체 수명과 저장 기간: 생성·소멸 순서, 임시 객체 수명, 댕글링 참조
C++ 객체 수명(lifetime)과 저장 기간(자동/정적/동적/스레드)의 차이, 생성·소멸 순서 규칙을 실전 예제로 정리합니다. 댕글링 참조·정적 초기화 순서 대란·임시 객체 수명 함정과 RAII·스마트 포인터 해법까지 다룹니다.
-
C++ 링커 에러 심화 가이드 — 심볼 해석·약한 심볼·SIOF·중복 진단
컴파일은 통과했는데 링크에서 실패하는 C++ 빌드를 추적하는 방법을 다룹니다. 정적 라이브러리 스캔 순서, 약한·강한 심볼, 정적 초기화 순서 문제(SIOF), 중복 심볼 진단, LTO와 링커 맵 파일 활용까지 설명합니다.
-
C++ std::locale과 facet: 숫자·통화·날짜를 지역 형식으로 출력하기
std::locale과 facet으로 숫자 천 단위 구분, 통화, 날짜 출력을 지역에 맞게 바꾸고 isalpha 같은 문자 분류를 locale 기준으로 처리하는 방법을 예제로 보여 주며, 시스템에 locale이 설치되지 않았을 때의 예외도 다룹니다.
-
C++ 반복문: for/while/do-while과 무한 루프·off-by-one 실수 피하기
for, while, do-while을 어떤 상황에 고르는지, 범위 기반 for의 동작, off-by-one과 세미콜론으로 생기는 무한 루프, 중첩 루프를 플래그·함수 분리·goto로 빠져나오는 방법을 구구단·소수 판별 예제로 익힐 수 있습니다.
-
C++로 O(1) LRU 캐시 만들기: unordered_map + list, splice, 흔한 반복자 실수
unordered_map에 list 반복자를 저장하고 splice로 노드를 앞으로 옮겨 get과 put을 모두 O(1)로 처리하는 LRU 캐시를 C++ 템플릿으로 구현합니다. 용량 초과 시 eviction 순서와 용량 0 같은 경계 조건도 다룹니다.
-
C++ make_unique·make_shared: new보다 나은 이유와 make 함수를 쓰면 안 되는 경우
make_unique와 make_shared가 new보다 예외에 안전한 이유, make_shared가 객체와 제어 블록을 한 번에 할당해서 얻는 이점과 weak_ptr이 남아 있을 때 메모리가 늦게 해제되는 단점, 커스텀 삭제자나 private 생성자처럼 make 함수를 쓸 수 없는 경우를 설명합니다.
-
C++ 프로젝트용 Makefile 작성: 변수, 패턴 규칙, 의존성 자동 생성, 병렬 빌드
Makefile은 Make가 사용하는 빌드 자동화 스크립트입니다. 컴파일과 링킹을 자동화하여 개발 생산성을 높입니다. 증분 빌드·병렬(make -j)은 CMake가 생성하는 Makefile/Ninja와도 같은 맥락입니다.