[c++] 각 클래스의 생성자와 소멸자 호출 순서
C++에서 클래스를 사용하면 각 클래스의 생성자와 소멸자가 어떻게 호출되는지 이해하는 것이 중요합니다. 일반적으로, 객체가 생성될 때 생성자가 호출되고, 객체가 소멸될 때 소멸자가 호출됩니다. 그러나 클래스 계층 구조에서 여러 클래스가 상속된 경우, 생성자와 소멸자의 호출 순서가 중요해집니다.
1. 기본 규칙
-
기본 클래스의 생성자가 먼저 호출됩니다. 파생 클래스의 생성자에서 기본 클래스의 생성자가 호출되기 때문에, 기본 클래스의 생성자가 먼저 실행됩니다.
class Base { public: Base() { std::cout << "Base Constructor" << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "Derived Constructor" << std::endl; } };
-
소멸자의 경우 반대로 동작합니다. 파생 클래스의 소멸자가 먼저 호출되고, 기본 클래스의 소멸자가 호출됩니다.
class Base { public: ~Base() { std::cout << "Base Destructor" << std::endl; } }; class Derived : public Base { public: ~Derived() { std::cout << "Derived Destructor" << std::endl; } };
2. 가상 소멸자
-
가상 소멸자를 사용하면 파생 클래스의 인스턴스가 소멸될 때 기본 클래스의 소멸자도 호출됩니다.
class Base { public: virtual ~Base() { std::cout << "Base Destructor" << std::endl; } }; class Derived : public Base { public: ~Derived() { std::cout << "Derived Destructor" << std::endl; } };
C++에서 클래스의 생성자와 소멸자 호출 순서를 이해하면, 클래스 계층 구조를 잘 이해하고 효율적으로 관리할 수 있습니다.
참고 문헌:
- https://en.cppreference.com/w/cpp/language/derived_class
- https://en.cppreference.com/w/cpp/language/destructor