가상 소멸자 질문
글쓴이: vani2 / 작성시간: 토, 2013/12/21 - 3:26오전
제가 찾아본 한계로는 가상소멸자가 필요한 경우를 모두 베이스 클래스와 서브클래스 모두 소멸자를 가질때의 예제만을 봐 왔는데요..
그래서 좀 다른 실험을 해보았는데요..
베이스 클래스에는 아예 소멸자를 정의하지 않고
서브 클래스에만 소멸자를 정의한 후 다형성을 이용해 베이스 클래스의 포인터에 서브클래스 개체를 할당받은후 할당해제 하니 생성자만 호출되고 소멸자가 아예 호출 되지 않네요..
#include <iostream> using namespace std; class A { public : A() { cout << "A클래스 생성자" << endl; } /* 소멸자를 없앰 virtual ~ A() { cout << "A클래스 소멸자" << endl; } */ }; class B : public A { public : B() : a(new int(0)) { cout << "B클래스 생성자" << endl; } ~B() { cout << "B클래스 소멸자" << endl; delete a; } private : int* a; }; int main() { A* bp = new B(); delete bp; return 0; }
*모바일로 작성한거라 코드가 조잡한점 이해 부탁드립니다.
실험환경 : std=c++11옵션준 c4droid gpp
위와 같이 하면 output에 두 생성자가 호출되었다는 문장만 뜨고
소멸자는 아예 호출되지 않습니다.
제 생각엔 A 베이스 클래스에 소멸자를 정의 하지않아, 디폴트 소멸자가 만들어지고 그 소멸자엔 virtual이 붙이지 않아서 생긴 불상사 같은데요..
만약 다형성을 고려하는 클래스를 만들때 베이스 클래스에서 소멸자를 사용하지 않는다고 해서 소멸자를 virtual로 선언하지 않는 것은 위험한가요?
Forums:
네.
네.
댓글 달기