C++ · coroutine

C++20 코루틴 상태 전이와 수명 경계

co_await, co_yield, co_return은 컴파일러가 만든 코루틴 프레임과 promise_type을 통해 중단점, 반환값, 예외 경로를 연결합니다.

코루틴 실행 단계

c++20

call

호출 시 프레임을 만들고 promise를 생성한 뒤 get_return_object와 initial_suspend를 차례로 평가합니다.

promise_type

co_return은 return_void/return_value, 예외는 unhandled_exception, 완료는 final_suspend 정책을 탑니다.

co_await

await_ready, await_suspend(handle), await_resume 순서로 중단 여부와 재개 값을 결정합니다.

resume

coroutine_handle::resume은 저장된 지점에서 실행을 잇고, done()으로 최종 중단 여부를 확인합니다.

destroy

핸들이 프레임 소유권을 뜻하지는 않으므로 destroy 책임을 반환 객체와 명확히 맞춥니다.

call promise initial await/yield final

수명과 예외 경계

co_yield는 promise.yield_value가 만든 awaiter로 중단하고, co_return과 예외는 promise에 기록된 뒤 final_suspend로 이동합니다. 프레임 안 참조가 외부 객체를 가리키면 resume 전후 생존 기간을 함께 검토해야 합니다.