프로그램/C,C++
[C++ 기본 4] 1. 가상소멸자
naudhizb
2022. 5. 17. 19:43
반응형
대부분의 C++ 프로그램에서는 객체를 핸들링하기 위해서 객체 포인터를 주로 사용하며, 파생클래스와 기반클래스 객체들을 일괄로 다루기 위해 기반클래스 포인터를 사용한다.
만약, 기반클래스 포인터를 이용하여 객체를 핸들링할 때, 객체의 소멸자가 가상함수가 아니라면 파생클래스를 소멸시킬 때 기반클래스의 포인터를 이용하여 소멸시키기 때문에 기반클래스의 소멸자가 불려 비정상적으로 객체를 소멸시키게 된다.
때문에 클래스의 소멸자는 가상함수(virtual function)이어야만 한다.
// 1_가상소멸자 149 page
#include <iostream>
// 핵심 : 모든 기반 클래스의 소멸자는 반드시 가상함수 이어야 한다.
class Base
{
public:
virtual ~Base() {} // 기반 클래스의 소멸자가 가상이면
// 모든 파생클래스의 소멸자는 가상함수이다
};
class Derived : public Base
{
public:
Derived() { std::cout << "자원할당" << std::endl; }
virtual ~Derived() { std::cout << "자원해지" << std::endl; }
};
int main()
{
Base* p = new Derived; // 기반 클래스포인터 = &파생클래스
delete p;
}
반응형