블로그
-
C++ 댕글링 레퍼런스: 지역 변수 반환·임시 객체·컨테이너 요소에서 생기는 원인과 탐지
C++ 댕글링 레퍼런스가 발생하는 네 가지 근본 원인(지역 변수 반환, 임시 객체, 컨테이너 요소, 해제된 메모리)을 실전 예제로 정리합니다. 반복자 무효화, 스마트 포인터, 람다 캡처, 메서드 체이닝 함정과 탐지·해결 방법까지 다룹니다.
-
C++로 자료구조 직접 구현하기: 연결 리스트·이진 탐색 트리·해시 테이블·스택·큐
C++로 연결 리스트, 이진 탐색 트리, 해시 테이블, 스택, 큐를 직접 구현하며 노드 연결과 삽입·삭제가 내부에서 어떻게 일어나는지 설명하고, LRU 캐시와 인접 리스트 그래프 예제로 응용합니다.
-
C++20 날짜 파싱과 서식: std::format·chrono::parse·zoned_time 사용법
C++20 std::format과 std::chrono::parse로 날짜·시간을 출력하고 파싱하는 방법. 서식 지정자, 파싱 실패 처리, zoned_time 시간대 변환, 로그 타임스탬프 예제까지 정리합니다.
-
C++ Decorator 패턴: 상속 대신 감싸서 기능 붙이기 (스트림·로깅·포매터 예제)
C++ Decorator 패턴으로 상속 없이 객체를 감싸 기능을 덧붙이는 방법을 스트림 데코레이터, 로깅 시스템, 텍스트 포매터 예제로 구현하고, 빌더 스타일로 여러 데코레이터를 조합하는 패턴을 설명합니다.
-
C++ 기본 인자 규칙: 헤더에만 두는 이유와 가상 함수에서 생기는 함정
C++ 기본 인자를 오른쪽부터 채워야 하는 규칙, 헤더 선언에만 기본값을 두고 재선언에서 반복하면 안 되는 이유, 가상 함수에서 기본값이 정적 타입 기준으로 결정되는 함정, 오버로딩과 충돌하는 경우를 예제로 설명합니다.
-
C++ 기본 초기화: 지역 변수가 쓰레기 값을 갖는 이유와 전역·정적 변수와의 차이
초기화자 없이 선언한 지역 int나 포인터가 쓰레기 값을 갖는 기본 초기화 규칙을 설명하고, 전역·정적 변수가 0으로 초기화되는 차이, 클래스 멤버와 배열에서 초기화가 빠지는 경우, 값 초기화와의 비교를 다룹니다.
-
C++ constexpr 함수: 컴파일 타임 평가 조건과 C++11·14·17 제약 변화
constexpr 함수가 상수 표현식 문맥에서만 컴파일 타임에 평가되는 규칙을 설명하고, C++11의 단일 return 제약에서 C++14·C++17로 완화된 내용, constexpr 클래스, 정적 변수·가상 함수 사용 시 생기는 오류를 예제로 다룹니다.
-
C++17 constexpr 람다: 암시적 constexpr 조건과 컴파일 타임 룩업 테이블
C++17부터 람다가 조건을 만족하면 암시적으로 constexpr이 되는 규칙을 설명하고, 팩토리얼·거듭제곱·배열 초기화 같은 컴파일 타임 계산, 타입 검사와 조건부 컴파일, 룩업 테이블을 만드는 활용 패턴을 다룹니다.
-
C++ 복사 생성자와 이동 생성자: 호출 시점, Rule of Five와 Rule of Zero
C++ 복사 생성자와 이동 생성자가 호출되는 시점을 동적 배열, 파일 핸들러, 간단한 스마트 포인터 예제로 보여 주고, Rule of Five와 Rule of Zero, 얕은 복사·자기 대입·noexcept 누락 문제를 설명합니다.
-
C++로 O(1) LRU 캐시 만들기: unordered_map + list, splice, 흔한 반복자 실수
unordered_map에 list 반복자를 저장하고 splice로 노드를 앞으로 옮겨 get과 put을 모두 O(1)로 처리하는 LRU 캐시를 C++ 템플릿으로 구현합니다. 용량 초과 시 eviction 순서와 용량 0 같은 경계 조건도 다룹니다.