[c++] 가상 소멸자(virtual destructor)의 역할

이미 가상 함수의 동작 방식을 이해하고 있다면, 가상 소멸자도 비슷한 원리로 동작합니다. 가상 함수들과 달리, 가상 소멸자를 통해 파생 클래스의 소멸자가 호출됩니다.

가상 소멸자를 사용하지 않을 경우, 부모 클래스의 포인터를 통해 파생 클래스의 인스턴스를 가리킬 때 파생 클래스에서 추가된 자원이 올바르게 해제되지 않을 수 있습니다. 이로 인해 메모리 누수가 발생할 수 있으므로 가상 소멸자를 사용하는 것이 좋습니다.

class Base {
public:
    virtual ~Base() {
        // Base 클래스의 소멸자 코드
    }
};

class Derived : public Base {
public:
    ~Derived() {
        // Derived 클래스의 소멸자 코드
    }
};

위 코드에서 Base 클래스의 소멸자가 가상으로 선언되었기 때문에, Derived 클래스의 객체에 대해 Base 클래스의 포인터가 사용될 때 올바른 소멸자가 호출됩니다. 따라서, 가상 소멸자를 사용하여 객체의 정확한 소멸자가 호출되도록 하는 것이 중요합니다.

이와 관련된 추가적인 자료는 다음을 참고하세요.

위 코드 및 내용은 C++11 표준에 기반하였습니다.