가상 디스패치

C++ 다형성은 Base로 부르고 Derived가 실행되는 구조다

값으로 복사하면 객체가 잘리고, 참조나 포인터와 virtual 함수를 함께 써야 런타임 실제 타입의 override가 호출된다.

slicing

값으로 받으면 정적 결과

Derived 객체를 넘겨도 Base 부분만 복사되어 파생 정보가 사라진다.

void print(Animal a)
dispatch

참조/포인터면 동적 결과

virtual 호출이 실제 객체의 vtable을 따라 override를 선택한다.

void print(const Animal& a)
virtual 기반 함수가 동적 디스패치 대상이어야 한다.
Base& / Base* 값 전달 대신 실제 객체를 가리키는 API를 쓴다.
virtual dtor 기반 포인터로 삭제 가능하면 소멸자도 virtual이다.