가상 함수가 기대와 다르면 값 잘림, virtual, override, 소멸자 순서로 본다
다형성 오류는 대부분 호출 경로가 실제 객체를 잃었거나, 가상 호출 계약이 불완전해서 생긴다.
| 점검 순서 | 확인할 코드 | 문제 신호 | 수정 방향 |
|---|---|---|---|
| 1. 값 잘림 | Base b = derived | Derived 정보가 사라짐 | Base& 또는 Base*로 받기 |
| 2. virtual 여부 | void draw() | Base 구현만 호출 | 기반 함수에 virtual 선언 |
| 3. override 시그니처 | void draw(int) override | 컴파일 오류 또는 다른 함수 | override로 시그니처 검증 |
| 4. 소멸자 | ~Base() | delete Base* 시 일부 정리 누락 | virtual ~Base() = default |
| 5. 컨테이너 | vector<Base> | 파생 객체가 값으로 잘림 | vector<unique_ptr<Base>> 검토 |