Binding Decision

호출 결과는 전달 방식, virtual 여부, 실제 객체 순서로 판정한다

같은 draw() 호출도 값으로 복사하면 슬라이싱이 먼저 일어나고, 참조/포인터에서 virtual을 거쳐야 런타임 타입으로 이동한다.

전달 형태
함수 선언
선택 기준
결과
값 복사Base b = d, f(Base)
virtual이어도 이미 파생 부분이 잘림
복사된 객체의 타입은 Base
객체 슬라이싱
참조/포인터Base&, Base*
비가상 멤버 함수
컴파일 시점의 표현 타입
정적 바인딩
참조/포인터Base&, Base*
virtual 멤버 함수
실제로 가리키는 객체 타입
동적 바인딩
판정식 값 복사 여부 확인 → virtual 확인 → 실제 객체 타입 확인
설계 결론 다형 인자는 Base 값보다 Base&/Base*를 쓰고, 기반 포인터로 삭제할 수 있으면 소멸자도 virtual로 둔다.