소프트웨어/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()