책 정리/C++ Coding Standards : C++ 코딩의 정석

항목 49 : 컨스트럭터와 디스트럭터에서는 가상 함수의 호출을 피하라. ( Avoid calling virtual functions in constructors and destructors. )

최익필 2009. 4. 3. 11:18

{

왜냐하면, 파생 객체의 생성자 호출 순서는 항상 기반 객체이기 때문이다.

잘 이해가 안간다....?

그러니까 기반 객체의 생성자가 호출 될 때 가상 함수가 호출 되어 지면, 파생 객체는 아직 만들어 지지 않았기 때문에, 파생 객체의 함수가 호출 되지 않고,  기반의 함수가 호출 된다.

이는 개발자에게 가독성은 물론이거나와 몹시 어렵다는 느낌을 줄 수 밖에 없다. 디스트럭트 역시 마찬가지다.

예제는?


무엇이 호출 되는지 보길 바란다.


겪어 봤나?

2008년 9월경, Template Method Pattern 을 사용하겠다는 자만으로, 겪어 봤었다. 그 후로는 가상 함수 호출 할 떄 각별히 주의를 갖게 되었다.


책의 내용은?

객체 생성 후에 가상 함수 호출 하라는 식으로 예제가 있다.(사후 컨스트럭션 호출...) Exceptional C++ 에선 비멤버 함수를 하나 만들어 두고, 거기에 일 처리 방식을 기록 한 뒤에, 객체를 밀어 넣어 템플릿 메서드 패턴을 구현하고 있는 것을 보았다.


객체 내부에서 하는 것도 좋은 방법이지만, 비멤버 함수 하나로 구현 할 수 있다면, 그게 더 좋은거 같다. 왜냐하면, 클래스의 무게를 줄여주기 때문이다.

}