Polymorphism Checklist

다형성 문제는 값 복사, virtual, 수명 계약 순서로 좁힌다

Base 참조/포인터라는 모양만으로는 충분하지 않다. 실제 판정은 복사로 파생 정보가 사라졌는지, 호출 지점이 virtual인지, 삭제 경로가 안전한지까지 함께 본다.

01 전달
값인가?f(Base), Base b = d
값이면 먼저 slicing이 발생해 런타임 타입 판정이 무의미해진다.
대안: Base&, Base*
02 호출
virtual인가?virtual void draw()
virtual이면 실제 객체의 override가 선택되고, 아니면 표현 타입으로 묶인다.
결과: 동적 바인딩
03 수명
Base로 삭제하는가?delete base
기반 포인터가 소유권을 가질 수 있으면 소멸자도 가상이어야 한다.
규칙: virtual ~Base()
override재정의 실수를 컴파일 오류로 바꾼다.
unique_ptr<Base>다형 객체의 소유권과 삭제 경로를 한곳에 묶는다.
복사 정책값 복사를 막거나 clone()처럼 명시적 복제를 제공한다.