C++ 문법
[C++] 가상 소멸자
simstealer
2022. 6. 27. 17:51
#include <iostream>
class Object
{
public:
Object()
{
std::cout << "부모 생성자 호출" << std::endl;
}
virtual ~Object()
{
std::cout << "부모 소멸자 호출" << std::endl;
}
};
class ChildObj : public Object
{
public:
ChildObj()
{
std::cout << "자식 생성자 호출" << std::endl;
}
~ChildObj()
{
std::cout << "자식 소멸자 호출" << std::endl;
}
};
int main()
{
Object* obj = new ChildObj;
delete obj;
}
위 코드로 실행을 하면
"부모 생성자 호출"
"자식 생성자 호출"
"부모 소멸자 호출"
이런 식으로 실행이 된다.
이렇게 되면 자식 소멸자를 호출하지 않게 되는데, 이런 경우 가상 소멸자를 사용하여 해결할 수 있다.
#include <iostream>
class Object
{
public:
Object()
{
std::cout << "부모 생성자 호출" << std::endl;
}
virtual ~Object()
{
std::cout << "부모 소멸자 호출" << std::endl;
}
};
class ChildObj : public Object
{
public:
ChildObj()
{
std::cout << "자식 생성자 호출" << std::endl;
}
~ChildObj()
{
std::cout << "자식 소멸자 호출" << std::endl;
}
};
int main()
{
Object* obj = new ChildObj;
delete obj;
}
부모 소멸자 앞에 virtual를 기입한다.