항목9 - 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자
2022.05.27
항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자
이유
객체의 생성과 소멸과정 중 가상 함수가 소멸된 상태면 링킹 에러가 발생한다.
파생 클래스의 데이터가 아직 초기화된 상태가 아니기 때문에,
C++은 아예 없었던 것처럼 취급하고 파생클래스의 가상 함수는 기본클래스의 가상함수를 기반으로 이뤄진다.
요약
기본 클래스 생성자 호출 시점에 객체 타입은 기본 클래스
- 호출 되는 가상 함수는 모두 기본 클래스 타입으로 결정됨
- 런타임 타입 정보 사용 요소(dynamic_cast, typeid 등) 사용 시에도 기본 클래스 타입으로 취급
주의
- 만약 여러 생성자로 인해 공통 작업을 별도의 함수로 정의할 경우 컴파일러 오류가 없어 찾기 어렵다
기억하자!
- 생성 소멸 과정 중에는 가상 함수를 호출하자!
- 하려거든 가상 함수를 비가상 함수로 바꿀 것!
댓글을 작성해보세요.