블로그
-
C++ 관찰 포인터: 소유하지 않는 참조를 원시 포인터·weak_ptr로 표현하는 기준
소유하지 않고 가리키기만 하는 관찰 포인터를 부모-자식 관계, 콜백, 컨테이너 요소 접근, 이벤트 시스템에서 쓰는 방법과 원시 포인터, unique_ptr, weak_ptr 중 무엇으로 표현할지, 대상이 먼저 소멸해 생기는 댕글링을 막는 법을 다룹니다.
-
C++17·20·23 주요 기능 정리: 구조화 바인딩부터 Concepts·Ranges·std::print까지
C++17의 구조화 바인딩, if constexpr, optional, variant, filesystem부터 C++20의 Concepts, Ranges, 코루틴, 모듈, <=> 연산자, C++23의 std::print와 다차원 첨자까지 각 기능이 기존 코드의 어떤 불편을 줄이는지 예제로 비교합니다.
-
C++17 std::invoke와 std::apply: INVOKE 규칙과 튜플을 인자로 펼치는 원리
std::invoke가 자유 함수, 멤버 함수 포인터, 함수 객체를 한 문법으로 호출하는 INVOKE 규칙과 std::apply가 index_sequence로 튜플을 풀어 인자로 넘기는 원리를 설명하고, make_from_tuple과 invoke_result·is_invocable 검사를 예제로 다룹니다.
-
C++ 힙 손상: 버퍼 오버플로우·이중 delete·use-after-free 원인과 ASan·Valgrind 탐지
C++ 힙 손상이 버퍼 오버플로우, 이중 delete, delete/delete[] 혼용, use-after-free로 발생하는 원리를 힙 메타데이터 구조로 설명합니다. AddressSanitizer·Valgrind 탐지법과 스마트 포인터·RAII 방지책까지 다룹니다.
-
C++ 조건문: if/else/switch 사용법과 흔한 실수
조건문을 처음 쓸 때 if-else if 사슬과 switch 중 무엇을 고를지, break를 빼먹어 다음 case로 흘러가는 fall-through, if (x = 5) 같은 대입 실수를 성적 계산기, ATM 메뉴, 윤년 판별 예제로 익히고 바로 고칠 수 있게 합니다.
-
C++ 동적 초기화와 정적 초기화 순서 문제: Meyers 싱글톤·constinit으로 해결하기
C++ 전역·정적 변수가 런타임에 초기화되는 동적 초기화를 정적 초기화와 비교하고, 번역 단위 간 초기화 순서 문제와 순환 의존성, 소멸 순서 문제를 Meyers 싱글톤, 지연 초기화, constinit으로 해결하는 방법을 설명합니다.
-
[[nodiscard]]로 반환값 무시 막기: 에러 코드, RAII 타입, 사유 메시지, Clang-Tidy 검증
C++ [[nodiscard]] 정리. 반환값을 무시해서 생기는 버그, 에러 코드와 RAII 타입에 붙이는 법, C++20 사유 메시지와 생성자 적용, Clang-Tidy 검증, C++26 std::ignore 논의를 다룹니다.
-
CMake 3.28+ 프리셋과 모듈로 크로스 플랫폼 빌드 구성하기
팀원마다, 플랫폼마다 달라지는 C++ 빌드 설정을 CMake로 통일하는 방법입니다. 최소 CMakeLists.txt와 타겟 기반 설계, PUBLIC·PRIVATE·INTERFACE 전파, CMakePresets.json, find_package와 FetchContent, 3.28부터 지원되는 C++20 모듈 빌드를 다룹니다.
-
C++ 버퍼 오버플로우: strcpy·오프바이원 실수가 생기는 원리와 방지·탐지 방법
strcpy·gets·sprintf처럼 경계를 검사하지 않는 함수와 오프바이원 실수가 어떻게 버퍼 오버플로를 일으키는지 예제로 보여 주고, snprintf·std::string 같은 대안, AddressSanitizer 탐지, 스택 보호 컴파일러 옵션으로 막는 방법을 설명합니다.
-
C++ 속성(Attributes): [[nodiscard]]·[[deprecated]]·[[likely]]·[[fallthrough]] 실전 사용법
[[nodiscard]]로 반환값 무시를 경고하고, [[deprecated]]로 API 교체를 알리며, [[maybe_unused]]·[[fallthrough]]·[[noreturn]]·C++20 [[likely]]를 어디에 붙여야 하는지 에러 처리와 API 마이그레이션 예제로 설명합니다.