Item9_객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자
챕터 핵심 내용
- 생성자 혹은 소멸자 안에서 가상 함수를 호출하지 말라.
- 생성자 혹은 소멸자 안에서 가상 함수를 호출하지 말라.
- 생성자 혹은 소멸자 안에서 가상 함수를 호출하면
- 호출 결과가 원하는 대로 돌아가지 않는다.
- 원하는 대로 돌아가도 찝찝할 것이다.
- 기본 클래스의 생성자가 호출될 동안에는, 가상 함수는 절대로 파생 클래스 아래로 내려가지 않는다.
- 즉, 파생 클래스 객체의 기본 클래스 부분이 생성되는 동안은, 그 객체의 타입은 기본 클래스이다.
- 소멸자의 경우도 마찬가지이다.
- 대신에 필요한 정보를 매개변수로 전달하게끔 설계하자. 즉, 비가상 함수로 만들어버리자.
- 도우미 함수를 만들어 생성자에 정보를 전달할 수도 있다.
- 이 같은 일이 일어나는 이유는 '미초기화된 데이터 멤버는 정의 되지 않은 상태에 있다'는 사실 때문이다.