polymorphic value

다형성 객체는 값으로 복사하지 않고 참조나 포인터로 전달한다

virtual 함수가 있어도 Base 값으로 복사하면 파생 클래스 부분이 잘려 나간다. API 경계에서는 소유권과 null 가능성을 기준으로 전달 방식을 고른다.

전달 방식예시다형성 유지언제 쓰나
값 전달void f(Shape s)아니오: object slicing다형성이 필요 없는 값 복사
상수 참조void f(const Shape& s)읽기 전용으로 실제 객체를 다룰 때
포인터void f(Shape* s)null 가능성이나 선택적 객체를 표현할 때
unique_ptrvector<unique_ptr<Shape>>다형 객체의 소유권을 컨테이너가 가질 때
shared_ptrshared_ptr<Shape>수명 공유가 명확히 필요할 때만 사용