블로그
-
C++ 기본 초기화: 지역 변수가 쓰레기 값을 갖는 이유와 전역·정적 변수와의 차이
초기화자 없이 선언한 지역 int나 포인터가 쓰레기 값을 갖는 기본 초기화 규칙을 설명하고, 전역·정적 변수가 0으로 초기화되는 차이, 클래스 멤버와 배열에서 초기화가 빠지는 경우, 값 초기화와의 비교를 다룹니다.
-
C++20 지정 초기화(Designated Initializers): 필드 이름으로 구조체 초기화하기와 순서 규칙
C++20 Designated Initializers로 구조체를 명확하게 초기화하는 방법. 기본 문법, C와 다른 순서 규칙, 중첩 구조체, 기본값과 부분 초기화, HTTP 요청 설정 예제를 정리합니다.
-
C++ 소멸자와 RAII: 가상 소멸자, 규칙 0, 소멸자에서의 예외
소멸자 호출 순서, 가상 소멸자가 필요한 정확한 조건과 대안(protected 비가상), Rule of 0/3/5, 소멸자에서의 예외·this 사용 함정, 스마트 포인터와의 조합까지 실무 기준으로 정리합니다.
-
C++ 다이아몬드 상속 문제: virtual 상속의 동작과 초기화 순서, 컴포지션 대안
C++ 다중 상속에서 같은 기본 클래스가 두 번 포함되는 다이아몬드 문제를 예제로 재현하고, virtual 상속이 객체 레이아웃을 바꿔 이를 해결하는 방식, 최하위 클래스가 가상 기본 클래스를 초기화하는 순서, 컴포지션 대안을 설명합니다.
-
C++ 동적 초기화와 정적 초기화 순서 문제: Meyers 싱글톤·constinit으로 해결하기
C++ 전역·정적 변수가 런타임에 초기화되는 동적 초기화를 정적 초기화와 비교하고, 번역 단위 간 초기화 순서 문제와 순환 의존성, 소멸 순서 문제를 Meyers 싱글톤, 지연 초기화, constinit으로 해결하는 방법을 설명합니다.
-
빈 클래스가 1바이트를 먹는 이유: EBCO와 C++20 [[no_unique_address]]
빈 클래스가 1바이트를 차지하는 이유와, 커스텀 삭제자를 넣은 unique_ptr이나 빈 할당자를 가진 컨테이너가 커지는 문제를 EBCO와 C++20 [[no_unique_address]]로 해결하는 방법, 압축 쌍 직접 구현을 설명합니다.
-
enable_shared_from_this: this를 shared_ptr로 넘기는 법과 bad_weak_ptr 함정
C++ enable_shared_from_this 정리. shared_from_this()로 this를 안전하게 공유하는 방법, 생성자에서 호출할 때 나는 bad_weak_ptr 예외, weak_from_this()(C++17), 비동기 콜백 활용을 다룹니다.
-
C++ enum class: 밑바닥 타입, 비트 플래그, 문자열 변환 패턴
C++11 enum class의 스코프와 암시적 변환 차단, 밑바닥 타입과 ABI·직렬화, 문자열 변환 패턴, 비트 플래그 연산자 오버로딩, 범위 밖 정수 캐스팅과 Windows ERROR 매크로 충돌 같은 함정을 예제로 정리합니다.
-
C++ LNK2019 | 'unresolved external symbol' 링커 에러 원인 5가지와 해결법
MSVC LNK2019 unresolved external symbol 오류를 선언만 있고 정의가 없는 경우, .cpp 파일 빌드 누락, 라이브러리 링크 누락, 네임스페이스 불일치, 헤더에 없는 템플릿 정의라는 다섯 가지 원인별로 재현하고 해결합니다.
-
C++ Segmentation fault 원인 5가지와 디버깅 방법 | GDB로 추적하기
C++ Segmentation fault의 대표 원인인 널 포인터 역참조, 해제 후 사용, 스택 오버플로, 배열 범위 초과, 잘못된 캐스팅을 코드로 재현하고, core dump를 활성화해 GDB·LLDB로 충돌 위치를 추적하는 방법을 설명합니다.