Devin.KR

기본 · 전체 목차 공개

C++ 객체와 자원 관리

참조와 const에서 출발해 생성자·소멸자, RAII, 복사·이동, 스마트 포인터, 컨테이너, 람다, string_view, 예외 안전성, 템플릿, 빌드, sanitizer까지 '누가 자원의 주인인가'를 기준으로 익히는 모던 C++(C++17/20) 입문입니다. 모든 예제는 직접 컴파일·실행한 결과를 싣습니다.

이 책을 읽기 전에

C 또는 다른 언어로 함수·배열·포인터를 다뤄 본 경험을 권합니다. C 메모리 기초는 『메모리 그림으로 배우는 C 기본』을 참고하세요.

공개 12/12장 · 목차 구성 2026-09-12

CONTENTS

목차

읽음 표시는 직접 선택하며 자동 완료되지 않습니다.

  1. 01
    C++ 참조와 const - 값 전달과 참조 전달, const 멤버 함수, 매달린 참조 (C++ 객체와 자원 관리 1장)

    복사 횟수를 직접 세어 값·참조·const 참조 전달의 차이를 확인하고, const 멤버 함수와 지역 변수 참조를 돌려주는 첫 수명 버그를 다룬다.

  2. 02
    C++ 생성자와 소멸자 - 객체가 태어나고 죽는 순서, 멤버 초기화 목록 (C++ 객체와 자원 관리 2장)

    생성·소멸 순간을 찍어 지역·멤버·임시·전역·힙 객체의 수명 순서를 확인한다. 멤버 초기화 순서 함정과 explicit 도 다룬다.

  3. 03
    C++ RAII - 파일 핸들과 뮤텍스를 소멸자에 맡기기 (C++ 객체와 자원 관리 3장)

    조기 반환과 예외에서 새는 파일 핸들을 세어 보고, 생성자에서 얻고 소멸자에서 돌려주는 RAII 클래스로 누수를 없앤다. lock_guard 도 같은 원리다.

  4. 04
    C++ 복사와 이동 - 규칙 0/3/5, 얕은 복사 이중 해제, noexcept 이동 (C++ 객체와 자원 관리 4장)

    원시 포인터를 가진 클래스의 기본 복사가 이중 해제로 끝나는 과정을 보고, 복사·이동 생성자와 대입을 직접 구현한다. vector 가 noexcept 이동을 요구하는 이유도 숫자로 확인한다.

  5. 05
    C++ 스마트 포인터 - unique_ptr shared_ptr weak_ptr 와 순환 참조 (C++ 객체와 자원 관리 5장)

    소유권을 타입으로 표현하는 세 가지 스마트 포인터를 텍스처 예제로 익힌다. 삭제자 지정, shared_ptr 순환 참조 누수와 weak_ptr 해결을 다룬다.

  6. 06
    C++ 표준 컨테이너 - vector 재할당과 반복자 무효화, map 과 unordered_map (C++ 객체와 자원 관리 6장)

    vector 가 언제 메모리를 옮기는지 capacity 로 확인하고, 옮긴 뒤 옛 참조가 조용히 틀린 값을 내는 버그를 본다. 삭제 루프 정석과 map 의 operator[] 함정도 다룬다.

  7. 07
    C++ 알고리즘과 람다 - sort find_if ranges 와 캡처 수명 (C++ 객체와 자원 관리 7장)

    센서 기록을 정렬·검색·집계하며 표준 알고리즘과 C++20 ranges 를 익힌다. 람다 캡처 방식과, 참조 캡처가 함수보다 오래 살 때 생기는 버그를 확인한다.

  8. 08
    C++ 문자열과 string_view - UTF-8 바이트 길이와 수명 함정 (C++ 객체와 자원 관리 8장)

    복사 없이 문자열을 나누는 string_view 의 장점과, 임시 문자열이나 지역 문자열을 가리키는 view 가 만드는 수명 버그, C 함수에 넘길 때의 널 종료 문제를 다룬다.

  9. 09
    C++ 예외와 오류 처리 - 스택 풀기, 예외 안전성 보장 단계, noexcept (C++ 객체와 자원 관리 9장)

    예외가 던져질 때 RAII 객체가 정리되는 순서를 확인하고, 기본 보장과 강한 보장의 차이를 재고 목록 예제로 비교한다. noexcept 위반과 예외 없는 오류 처리도 본다.

  10. 10
    C++ 템플릿 첫걸음 - 함수 템플릿, 클래스 템플릿 링 버퍼, concepts (C++ 객체와 자원 관리 10장)

    타입만 다른 코드를 템플릿 하나로 묶고, 고정 크기 링 버퍼를 클래스 템플릿으로 만든다. 추론 실패 오류 읽는 법과 C++20 concepts, if constexpr 를 다룬다.

  11. 11
    C++ 빌드 구조 - 헤더와 소스 분리, 링크 오류 읽기, CMake 개념 (C++ 객체와 자원 관리 11장)

    컴파일과 링크를 손으로 나눠 실행해 보며 undefined symbol, duplicate symbol 오류가 왜 생기는지 이해한다. 같은 구조를 CMakeLists.txt 로 옮기는 방법을 설치 없이 설명한다.

  12. 12
    C++ 메모리 버그 디버깅 - UBSan, 표준 라이브러리 검사, 정적 분석과 ASan (C++ 객체와 자원 관리 12장)

    정의되지 않은 동작을 실행 중에 잡는 UBSan, libc++ 검사 모드, clang 정적 분석기를 실제 출력으로 익힌다. ASan 사용법과 이 검증 환경에서 ASan 이 멈춘 기록도 남긴다.

이 책은 Devin.KR 원고를 참조합니다. 원고의 원래 주소와 저작자 표기를 유지하며 같은 글을 다시 등록하지 않습니다. 수정된 원고는 읽기 화면에서 재검수 상태를 확인할 수 있습니다.

이 책·표지의 저작권 및 출처 관련 요청