소프트웨어/C/C++
c/c++] virtual 소멸자를 이용한 메모리누수 방지
cs만두
2013. 8. 11. 17:08
class AAA{
public:
AAA(){
cout<<"AAA생성자호출"<<endl;
}
virtual ~AAA(){
cout<<"AAa소멸자호출"<<endl;
}
};
class BBB:public AAA{
public :
BBB(){
cout<<"BBB생성자호출"<<endl;
}
virtual ~BBB(){
cout<<"BBB소멸자호출"<<endl;
}
};
int main(){
AAA* a= new BBB();
BBB* b= new BBB();
delete a; //여기서 소멸자를 부르는데 AAA의 소멸자를 virtual로 해주지 않으면
//a의 객체가 AAA로만 인식해서 바로 AAA소멸자를 부르고 끝.
//virtual로해주면 ~AAA접근후 가상임을 확인하고 ~BBB로 접근해서 소멸자를 호출한 후
//~AAA에 접근해서 소멸자를 호출하므로 메모리 누수를 막을수 있다.
delete b;
return 0;
}
그냥 ~AAA()로 선언했을시
딜리트-> ~AAA()접근 끝;
virtual ~AAA()로 선언했을시
딜리트-> virtual ~AAA()(그냥통과) -> ~BBB() -> ~AAA()