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를 기입한다.