이유
1. 객체의 생성과 소멸과정 중 가상 함수가 날라간 상태라면 신비로운 동작을 하기 때문이다.
왜냐하면
파생 객체가 만들어 질때, 베이스 생성자가 호출되는 동안은 베이스 생성자만 초기화 값을 가지고 있고 베이스 클래스의 소멸자가 호출되어 질때, 이미 파생 클래스의 데이터들은 이미 소멸되었기 때문에, 파생클래스 쪽으로 내려가서 호출되어지지 않기 때문이다!
주의점
1. 객체의 생성과 소멸 시점에 대해서 숙지하고 있어야 한다. 참조 구역 참조
참조
상속 관계에 있는 객체의 생성자와 소멸자 호출 시점
1. 생성자 호출 시점
첫째, 베이스 생성자 호출 후 베이스 생성자의 멤버 객체들 초기화
둘째, 파생 생성자 호출 후 파생 생성자의 멤버 객체들 초기화
2. 소멸자 호출 시점
첫째, 파생 소멸자 호출 후 파생 생성자 멤버 객체 소멸
둘째, 베이스 생성자 호출 후 베이스 생성자 멤버 객체들 초기화
이것만은 잊지 말자!
1. 생성자 혹은 소멸자 안에서는 가상 함수를 사용하지 말자, 왜냐하면 참조
관련 링크
http://evax.springnote.com/pages/871402
http://ljh131.tistory.com/16
1. 객체의 생성과 소멸과정 중 가상 함수가 날라간 상태라면 신비로운 동작을 하기 때문이다.
왜냐하면
파생 객체가 만들어 질때, 베이스 생성자가 호출되는 동안은 베이스 생성자만 초기화 값을 가지고 있고 베이스 클래스의 소멸자가 호출되어 질때, 이미 파생 클래스의 데이터들은 이미 소멸되었기 때문에, 파생클래스 쪽으로 내려가서 호출되어지지 않기 때문이다!
주의점
1. 객체의 생성과 소멸 시점에 대해서 숙지하고 있어야 한다. 참조 구역 참조
참조
상속 관계에 있는 객체의 생성자와 소멸자 호출 시점
1. 생성자 호출 시점
첫째, 베이스 생성자 호출 후 베이스 생성자의 멤버 객체들 초기화
둘째, 파생 생성자 호출 후 파생 생성자의 멤버 객체들 초기화
2. 소멸자 호출 시점
첫째, 파생 소멸자 호출 후 파생 생성자 멤버 객체 소멸
둘째, 베이스 생성자 호출 후 베이스 생성자 멤버 객체들 초기화
이것만은 잊지 말자!
1. 생성자 혹은 소멸자 안에서는 가상 함수를 사용하지 말자, 왜냐하면 참조
관련 링크
http://evax.springnote.com/pages/871402
http://ljh131.tistory.com/16
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 14: 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 (0) | 2008.06.01 |
---|---|
항목 13: 자원 관리에는 객체가 그만! (0) | 2008.06.01 |
항목 12: 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2008.06.01 |
항목 11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2008.06.01 |
항목 10: 대입 연산자는 *this의 참조자를 반환하게 하자. (0) | 2008.05.31 |
항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자. (0) | 2008.05.31 |
항목 7: 다향성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 (0) | 2008.05.31 |
항목 6: 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자 (0) | 2008.05.31 |
항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자. (0) | 2008.05.31 |
항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자. (0) | 2008.05.31 |
최근댓글