[c++] 생성자와 소멸자의 순서와 상속

C++에서 상속을 사용할 때, 부모 클래스와 자식 클래스의 생성자와 소멸자의 호출 순서에 대해 이해하는 것이 중요합니다. 생성자와 소멸자는 객체의 초기화와 정리를 담당하기 때문에, 올바른 순서로 호출되어야 합니다.

생성자 호출 순서

부모 클래스의 생성자가 먼저 호출된 후, 자식 클래스의 생성자가 호출됩니다. 즉, 상속 관계에서 생성자는 위에서 아래로 호출되어 초기화됩니다. 예를 들어:

class Parent {
public:
    Parent() {
        std::cout << "Parent constructor" << std::endl;
    }
    ~Parent() {
        std::cout << "Parent destructor" << std::endl;
    }
};

class Child : public Parent {
public:
    Child() {
        std::cout << "Child constructor" << std::endl;
    }
    ~Child() {
        std::cout << "Child destructor" << std::endl;
    }
};

위 코드에서 Child 객체를 생성할 때, Parent 클래스의 생성자가 먼저 호출되고, 그 후에 Child 클래스의 생성자가 호출됩니다.

소멸자 호출 순서

반대로, 소멸자는 자식 클래스의 소멸자가 먼저 호출된 후, 부모 클래스의 소멸자가 호출됩니다. 이는 생성자 호출 순서와 정반대입니다. 위 코드에서 Child 객체가 소멸될 때, Child 클래스의 소멸자가 먼저 호출되고, 그 후에 Parent 클래스의 소멸자가 호출됩니다.

이러한 순서는 상속된 멤버 변수나 객체들이 올바르게 초기화되고 정리되도록 보장합니다.

주의사항

다중 상속의 경우, 가상 상속 등과 같이 복잡한 상속 구조에서는 생성자와 소멸자 호출 순서에 대한 이슈가 발생할 수 있습니다. 이러한 경우에는 레퍼런스 및 공식 문서를 참고하여 적절한 방법으로 해결해야 합니다.

C++에서의 상속과 관련된 생성자 및 소멸자 호출 순서를 정확히 이해하고 활용함으로써 안정적인 클래스 설계를 할 수 있게 됩니다.

이상으로 C++에서의 생성자와 소멸자 호출 순서와 상속에 대한 간단한 설명을 마치겠습니다.

참고문헌: https://www.learncpp.com/cpp-tutorial/111-the-constructor-for-base-classes-and-derived-classes/

원본 보기