블로그
-
C++ malloc vs new vs make_unique: 메모리 할당 방식별 안전성 비교
C++ malloc, new, make_unique를 생성자 호출·타입 안전성·실패 처리(nullptr, bad_alloc, nothrow)·예외 안전성으로 비교하고, 속도 차이가 거의 없는 이유와 벤치마크가 0ms로 나오는 이유까지 정리합니다.
-
C++ std::function vs 함수 포인터: 성능과 유연성의 트레이드오프
콜백을 저장할 때 함수 포인터와 std::function 중 무엇을 고를지 비교합니다. 호출 한 번의 비용 차이는 간접 호출 한 단계 정도이고, 실제 비용은 인라인 불가와 생성·복사 시 힙 할당에서 생긴다는 점을 이벤트 시스템·스레드 풀 예제로 설명합니다.
-
C++ string vs string_view: 복사 없는 문자열 처리와 선택 기준
읽기 전용 문자열을 인자로 받을 때 std::string_view가 복사와 할당을 어떻게 줄이는지, 소유와 수정이 필요할 때는 왜 std::string이어야 하는지 비교합니다. 부분 문자열, 파싱, 로깅 예제와 함께 마이크로벤치마크를 읽을 때의 함정도 짚습니다.
-
C++ size_t와 ptrdiff_t: 부호 없는 인덱스 함정과 std::ssize·cmp_less
size_t는 크기·인덱스에, ptrdiff_t는 포인터 차이에 쓰는 표준 별칭입니다. 부호 있는/없는 혼합, 루프·역방향 순회, 이식성과 경고를 줄이는 패턴을 정리합니다. C++20 std::ssize·std::cmp_less처럼 혼합 비교를 안전하게 만드는 도구도 다룹니다.
-
C++20 지정 초기화(Designated Initializers): 필드 이름으로 구조체 초기화하기와 순서 규칙
C++20 Designated Initializers로 구조체를 명확하게 초기화하는 방법. 기본 문법, C와 다른 순서 규칙, 중첩 구조체, 기본값과 부분 초기화, HTTP 요청 설정 예제를 정리합니다.
-
C++ 반복문: for/while/do-while과 무한 루프·off-by-one 실수 피하기
for, while, do-while을 어떤 상황에 고르는지, 범위 기반 for의 동작, off-by-one과 세미콜론으로 생기는 무한 루프, 중첩 루프를 플래그·함수 분리·goto로 빠져나오는 방법을 구구단·소수 판별 예제로 익힐 수 있습니다.
-
C++ use-after-free: 해제 후 사용이 생기는 패턴과 ASan·gdb로 추적하기
delete 후 포인터 사용, 지역 변수를 가리키는 참조 반환, 벡터 재할당으로 무효화된 반복자, 람다가 캡처한 소멸된 객체처럼 Use After Free가 생기는 패턴을 예제로 보여줍니다. ASan과 gdb로 추적하는 법과 스마트 포인터로 막는 법도 다룹니다.
-
C++20 템플릿 람다: auto 람다와 차이, Concepts로 타입 제한하기
C++20 템플릿 람다의 명시적 템플릿 매개변수 문법과 Concepts를 이용한 타입 제약, 여러 매개변수·파라미터 팩·제네릭 팩토리 패턴 등 실전 활용법과 자주 발생하는 컴파일 에러 해결법을 코드로 정리합니다.
-
C++ 템플릿 템플릿 인자 | template template parameter 가이드
vector<int>처럼 구체화된 타입이 아니라 vector 자체를 템플릿 인자로 받는 template template parameter 문법을 설명합니다. 표준 컨테이너의 Allocator 인자 때문에 매칭이 실패하는 문제, C++17 typename 선언, 컨테이너 정책 주입 예제를 다룹니다.
-
C++ this 포인터: 메서드 체이닝, 자기 대입 검사, 람다 this 캡처 수명
멤버 함수 안의 this가 호출한 객체를 가리키는 원리를 메서드 체이닝, 자기 대입 방지, 콜백 등록 예제로 보여줍니다. 매개변수와 멤버 이름 충돌, static 멤버 함수에 this가 없는 이유, 람다에 [this]를 캡처했을 때의 수명 문제도 다룹니다.