-
항목 7:가상 소멸자@ 16. 1 ~ 17. 1/Effective C++ 2015. 1. 14. 23:20
가상 소멸자를 하는 이유는
어떤 함수(파생클래스를 반환하는데 반환인수는 기본클래스)
가 반환하는 포인터가 파생클래스 객체애 대한 포인터라는 점과 이 포인터가 가리키는 객체가 삭제될때 기본 클래스 포인터를 통해 삭제된다는 점
A
B : public A
일때
A* return() 일 경우..
A부분은 저 세상(delete)되는데 B부분은 남아 있다 ..
가상함수를 하나라도 가진 클래스는 가상 소멸자를 가져야한다.
가상 함수가 들어가게 되면 객체 크기가 커진다.
어떤 객체에 대해 어떤 가상함수가 호출되려고 하면 호출되는 실제 함수는 그 객체의 vptr(가상함수 테이블 포인터)가 가리키는 vtbl(가상 함수 테이블)에 따라 결정된다 vtbl에 있는 함수 포인터들 중 적절한 것이 연결되는 것.
순수가상소멸자
A클래스
virtual ~A()=0;
B클래스 public A 일경우..
그런데 이런경우는 진짜 흔하지 않지만..(가상함수가 없는 경우가 있을런지..)생긴다면..
즉 클래스가 추상클래스였으면 좋겠는데 마땅히 넣을 만한 순수가상함수가 없을때..
이렇게 소멸자에게 부여하는데..
중요한 점은
A::~A()
{}정의를 해줘야한다. A클래스 내에서!
끝
'@ 16. 1 ~ 17. 1 > Effective C++' 카테고리의 다른 글
항목 10 : 대입 연산자는 *this의 참조자를 반환한다 (0) 2015.01.15 항목 9 : 객체 생성 및 소멸자에 절대로 가상 함수 호출 금지 (0) 2015.01.15 항목6 : 복사생성자 및 대입연산자 제한 (0) 2015.01.14 항목 37 : 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 재정의하지 말자 (0) 2014.06.02 항목 33 : 상속된 이름을 숨기는 일은 피하자 (0) 2014.06.01