Parameter Design

포인터·참조 매개변수 계약

C++ 매개변수 타입은 null 허용, 재지정 가능성, 수정 여부, 소유권과 수명 책임을 호출자에게 드러내는 API 계약입니다.

null, 수명, 소유권을 타입에 드러내기

api design

T&

반드시 존재하는 객체를 수정합니다. 참조는 null을 표현하지 않고 다른 객체로 다시 묶을 수 없습니다.

const T&

큰 객체를 복사하지 않고 읽습니다. 임시 객체 수명 연장은 매개변수 호출 동안만 안전합니다.

T*

nullptr을 허용하거나 출력 인자를 선택적으로 받을 때 씁니다. 역참조 전 null 검사가 실패 신호입니다.

const T*

포인터 값은 바꿀 수 있지만 대상은 읽기 전용입니다. 포인터 자체 고정은 T* const처럼 별도로 표현합니다.

Ownership

소유권 이전은 std::unique_ptr<T>, 공유 소유는 std::shared_ptr<T>, 비소유 배열 뷰는 std::span<T>가 더 분명합니다.

Lifetime

포인터나 참조를 저장하면 호출자 객체가 더 오래 살아야 합니다. dangling 참조는 타입만으로 막히지 않습니다.

존재 보장수정 여부null 가능형태 선택
포인터·참조 매개변수 계약 점검

raw pointer는 소유권이 아니라 주소입니다. "없을 수 없음"을 포인터로 표현해야 한다면 gsl::not_null 같은 보조 타입을 검토합니다.