다형성 객체는 값으로 복사하지 않고 참조나 포인터로 전달한다
virtual 함수가 있어도 Base 값으로 복사하면 파생 클래스 부분이 잘려 나간다. API 경계에서는 소유권과 null 가능성을 기준으로 전달 방식을 고른다.
| 전달 방식 | 예시 | 다형성 유지 | 언제 쓰나 |
|---|---|---|---|
| 값 전달 | void f(Shape s) | 아니오: object slicing | 다형성이 필요 없는 값 복사 |
| 상수 참조 | void f(const Shape& s) | 예 | 읽기 전용으로 실제 객체를 다룰 때 |
| 포인터 | void f(Shape* s) | 예 | null 가능성이나 선택적 객체를 표현할 때 |
| unique_ptr | vector<unique_ptr<Shape>> | 예 | 다형 객체의 소유권을 컨테이너가 가질 때 |
| shared_ptr | shared_ptr<Shape> | 예 | 수명 공유가 명확히 필요할 때만 사용 |