capture lifetime

람다가 오래 살면 참조 캡처부터 의심한다

`[&]`는 짧은 알고리즘 호출 안에서는 편하지만, 람다를 반환하거나 저장하면 외부 변수의 수명이 먼저 끝날 수 있습니다.

auto create_lambda() int local_var = 10; return [&local_var] { ... };
생성

지역 변수를 참조

람다 객체는 `local_var`의 주소만 기억하고 값을 소유하지 않습니다.

반환

스코프 종료

`create_lambda`가 끝나면 `local_var`는 소멸하고 참조만 남습니다.

호출

정의되지 않은 동작

나중에 람다를 호출하면 이미 사라진 객체를 읽게 됩니다.

값 캡처

복사본을 람다 안에 저장

`[local_var]`는 원본 수명과 분리되어 반환된 람다에서도 안전합니다.

참조 캡처

짧은 호출에만 제한

`std::for_each` 호출 안에서 바로 실행되고 끝나는 조건이라면 부담이 작습니다.

shared_ptr

수명을 명시적으로 공유

비동기 작업처럼 객체가 오래 필요하면 포인터를 값으로 캡처해 수명을 늘립니다.

this

객체 수명도 함께 확인

`[this]`는 포인터를 잡습니다. C++17의 `[*this]`는 현재 객체 복사본이 필요할 때 씁니다.

점검 문장: 람다가 현재 스코프 밖에서 호출될 수 있다면 `[&]`는 기본 선택지가 아닙니다. 값 캡처나 소유권이 드러나는 스마트 포인터 캡처를 먼저 검토합니다.