가상 소멸자 2

C++ 순수 가상 소멸자(Pure Virtual Destructor) 총정리

1. 순수 가상 소멸자의 개념 우리는 C++에서 순수 가상 소멸자를 선언할 수 있다. 소멸자가 순수 가상 객체(클래스의 인스턴스)로 생성된 후, 소멸자의 바디가 제공된다. 이는 소멸자는 파생 클래스에서 재정의되지 않고 역순으로 호출되기 때문이다. 따라서 순수 가상 소멸자의 경우 소멸자 바디를 지정해야 한다. 기본 클래스 포인터 객체를 사용하여 파생 클래스의 인스턴스를 파괴할 때, 가상 소멸자를 사용하여 파생 클래스 객체 또는 인스턴스에 의해 할당된 메모리 공간을 확보한다. 참고로, 오직 '소멸자'만이 가상이 될 수 있다. '생성자'를 가상으로 선언할 수는 없다. 이는 생성자를 Base/Super 클래스에 선언하고, 동일한 기능을 가진 Derived/Sub 클래스에 호출하여 재정의하려고 하면 항상 오류가 ..

C++ 2024.04.12

C++ 가상 소멸자(Virtual Destructor) 총정리

1. 가상 소멸자의 개념 가상 소멸자가 아닌 기본 클래스 유형의 포인터를 사용하여 파생 클래스의 객체를 삭제하면, 정의되지 않은 동작이 발생한다. 이 상황을 수정하려면 기본 클래스를 가상 소멸자로 정의해야 한다. 즉, 객체의 소멸과정에서는 포인터 변수의 자료형에 상관없이 모든 소멸자가 호출되어야 하는데, 그 해결책이 가상 소멸자라는 것이다. 예를 들어, 아래 프로그램은 정의되지 않은 동작을 발생시킨다: // CPP program without virtual destructor // causing undefined behavior #include using namespace std; class base { public: base() { cout

C++ 2024.04.08
728x90