include <iostream>
using namespace std;
class AWOV
{
public:
AWOV() {
cout<<"AWOV start"<<endl;
}
virtual ~AWOV() {
cout<<"AWOV end"<<endl;
}
};
class TEST : public AWOV
{
public:
TEST() {
cout<<"TEST start"<<endl;
}
virtual ~TEST() {
cout<<"TEST end"<<endl;
}
};
int main()
{
AWOV *p = new TEST;
delete(p);
return 0;
}
TEST 클래스가 AWOV상속을 받고 있을 때 위의 코드처럼 AWOV 포인터로 TEST 클래스를 할당받을 시에 생성자 , 소멸자 호출관계에 대해서 알면된다.
결과는
AWOV start
TEST start
TEST end
AWOV end
생성자 호출 순서는 부모 -> 자식
소멸자 호출 순서는 자식 -> 부모
이처럼 반대로 되어 있다
주의 해야하는 점은
상속관계에서 부모 클래스에서 소멸자를 virtual 선언하지 않으면
AWOV start
TEST start
AWOV end
이 처럼 자식 클래스의 소멸자가 호출되지 않는다.
주의할점은
부모클래스의 소멸자를 순수가상 함수로 만들면 에러가 난다.
그리고 소멸자가 가상함수로 되어 있지 않은 클래스를 상속 받으면 안되는 거다
대표적인게 책에서는 STL 컨테이너 다