카테고리 없음

[Effective C++] Item9_객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자

해달 2018. 1. 26. 10:29

Item9_객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자

챕터 핵심 내용

  • 생성자 혹은 소멸자 안에서 가상 함수를 호출하지 말라.

- 생성자 혹은 소멸자 안에서 가상 함수를 호출하지 말라.

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