항목 14. 베이스 클래스에서 소멸자는 가상 함수로 선언해야 한다.     2008/05/31 14:36 수정    
부재 :  모든 베이스 클래스가 아닌, 다형성을 지닌 클래스에 대해선 반드시 가상소멸자를 선언해야 한다.


이유.
1. 베이스 클래스로 자식 클래스의 소멸자를 호출하기 위해서다.
- 자식(유도)클래스로 동적메모리 할당 후 부모클래스의 포인터로 받아서 사용할 경우가 생긴다면
자식(유도) 클래스의 소멸자를 꼭 호출해야지만 안전한 프로그래밍이 가능해 지기 때문이다.

문제 해결
1. 베이스 클래스의 소멸자를 virtual 의 키워드를 넣어주면 된다.

주의 해야 할점
1. 소멸자의 호출 시기를 분명히 숙지하고 있어야 한다.
2. 동적메모리를 사용하는 클래스일 경우, 매우 주의깊게 써야 한다

덧붙여
1. 추상 클래스를 만들고(추상 클래스란 순수 가상 함수가 있는 클래스를 말한다, 추상 클래스는 객체를 만들수가 없다.) 자식 프로세스가 가지고 있는 여러 함수들을 추상 클래스에서 가상함수로 받아 들이면,  컨트롤 클래스로 사용 할수 있게 된다.

2. 추상 클래스의 순수 가상 소멸자를 클래스 외부에 선언해 두어야 한다
예) 정적 멤버 변수 처럼.    2008/05/31 14:36 수정
2. 추상 클래스의 순수 가상 소멸자는 꼭 정의해 두어야 한다.
왜냐하면, 파생클래스의 소멸자가 베이스 클래스의 순수 가상 소멸자는를 호출해 주지 않기 때문이다.



개인적인 생각
사실 이런 문법은 사용하기 까다롭지만, 베이스 클래스로 그 자식 클래스들을 컨트롤 할수 있는 장점이 있다.

이것은 한 자료구조에 이 베이스클래스의 포인터를 담아 관리한다면, 모든 클래스를 컨트롤 할수 있는 막강한 기능을 제공한다.
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기