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()
'소프트웨어 > C/C++' 카테고리의 다른 글
c/c++] try catch (0) | 2013.08.11 |
---|---|
c/c++] 템플릿 (0) | 2013.08.11 |
c/c++] 연산자오버로딩(=이용)할때 주의(얕은복사,깊은복사) (0) | 2013.08.11 |
c/c++] 객체포인터와 객체레퍼런스 (0) | 2013.08.11 |
객체] public, protected, private (0) | 2013.08.11 |
c/c++] 클래스 동적할당 (0) | 2013.08.10 |
c++] 동적할당실패시 예외처리 (0) | 2013.08.10 |