[c++] 구조체와 클래스의 가상 소멸자
C++에서 구조체와 클래스는 거의 동일하지만 가장 큰 차이점 중 하나는 기본적으로 클래스는 private 접근 지정자를 가지고 있지만 구조체는 public 접근 지정자를 가진다는 것입니다. 그러나 C++11 이후부터는 이러한 차이가 크게 없어졌습니다.
가상 소멸자는 C++에서 상속 및 다형성을 지원하기 위해 사용됩니다.
가상 소멸자는 다형성으로 인해 C++에서 매우 중요하며, 기본 클래스의 포인터를 사용하여 파생된 클래스의 객체를 삭제할 때 사용됩니다.
가상 소멸자가 구조체와 클래스에서 어떻게 다르게 작동하는지 알아보겠습니다.
구조체에서의 가상 소멸자
struct Base {
virtual ~Base() {
std::cout << "Base 구조체의 소멸자" << std::endl;
}
};
struct Derived : Base {
~Derived() {
std::cout << "Derived 구조체의 소멸자" << std::endl;
}
};
클래스에서의 가상 소멸자
class Base {
public:
virtual ~Base() {
std::cout << "Base 클래스의 소멸자" << std::endl;
}
};
class Derived : public Base {
public:
~Derived() {
std::cout << "Derived 클래스의 소멸자" << std::endl;
}
};
가상 소멸자의 중요성
가상 소멸자는 파생 클래스의 소멸자가 제대로 호출되도록 보장합니다.
Base* obj = new Derived();
delete obj; // 파생 클래스의 소멸자까지 올바르게 호출됨
결론
가상 소멸자는 C++에서 상속 및 다형성에 필수적입니다. 구조체와 클래스 모두에서 사용할 수 있으며, 파생 클래스의 소멸자가 호출되도록 보장합니다. 가상 소멸자는 메모리 누수와 객체 소멸 과정에서 발생할 수 있는 문제를 방지하기 위해 중요한 역할을 합니다.