부모 클래스에 virtual 키워드를 안주었을때
class Player
{
public:
Player()
{
cout << "Player()" << endl;
}
~Player()
{
cout << "~Player()" << endl;
}
private:
int _hp = 10;
};
class Knight : public Player
{
public:
Knight()
{
cout << "Knight()" << endl;
}
~Knight()
{
cout << "~Knight()" << endl;
}
};
void main()
{
Player* k1 = new Knight();
delete k1;
}
출력 결과:
Player()
Knight()
~Player()
결과를 보면 Knight에 대한 소멸자 함수는 실행되지 않음
부모 클래스에 virtual 키워드 추가
class Player
{
public:
Player()
{
cout << "Player()" << endl;
}
virtual ~Player()
{
cout << "~Player()" << endl;
}
private:
int _hp = 10;
};
class Knight : public Player
{
public:
Knight()
{
cout << "Knight()" << endl;
}
~Knight()
{
cout << "~Knight()" << endl;
}
};
void main()
{
Player* k1 = new Knight();
delete k1;
}
출력 결과:
Player()
Knight()
~Knight()
~Player()
결과를 보면 Knight에 대한 소멸자 함수가 실행