가상 소멸자 질문

vani2의 이미지

제가 찾아본 한계로는 가상소멸자가 필요한 경우를 모두 베이스 클래스와 서브클래스 모두 소멸자를 가질때의 예제만을 봐 왔는데요..

그래서 좀 다른 실험을 해보았는데요..

베이스 클래스에는 아예 소멸자를 정의하지 않고
서브 클래스에만 소멸자를 정의한 후 다형성을 이용해 베이스 클래스의 포인터에 서브클래스 개체를 할당받은후 할당해제 하니 생성자만 호출되고 소멸자가 아예 호출 되지 않네요..

#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로 선언하지 않는 것은 위험한가요?

klara의 이미지

네.