> 백엔드 개발 > C++ > C 상속에서 생성자와 소멸자 호출 순서는 무엇입니까?

C 상속에서 생성자와 소멸자 호출 순서는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-05 20:15:43
원래의
1006명이 탐색했습니다.

What's the Order of Constructor and Destructor Calls in C   Inheritance?

상속에서 생성자와 소멸자 호출 순서

상속 클래스를 정의할 때 생성자와 소멸자가 호출되는 순서를 이해하는 것이 중요합니다. . 다음 예를 고려하십시오.

struct A {
    A() { cout << "A() C-tor" << endl; }
    ~A() { cout << "~A() D-tor" << endl; }
};

struct B : public A {
    B() { cout << "B() C-tor" << endl; }
    ~B() { cout << "~B() D-tor" << endl; }

    A a;
};
로그인 후 복사

구성 순서:

  1. 기본 클래스 생성자: 기본 클래스의 생성자(A ) 파생 객체의 기본 부분을 초기화합니다.
  2. 멤버 필드 구성: B에 A 유형의 필드가 있으므로 생성자는 이 필드에 대한 생성자를 호출합니다.
  3. 파생 클래스 생성자: 마지막으로 파생 클래스의 생성자(B ) 객체의 초기화를 완료합니다.

따라서 구성 순서는 는:

  • A()
  • A(a)
  • B()

파기명령:

소멸자는 역순으로 호출됩니다. construction:

  1. 파생 클래스 소멸자: 파생 클래스(B)의 소멸자가 정리 프로세스를 시작합니다.
  2. 멤버 필드 소멸: A형(a)의 필드가 소멸됩니다.
  3. 베이스 클래스 소멸자: 마지막으로 기본 클래스(A)의 소멸자가 소멸을 완료합니다.

파괴 순서 is:

  • ~B()
  • ~A(a)
  • ~A()

초기화 프로그램 목록 :

B에 명시적인 초기화 목록이 정의되어 있지 않더라도 기본 초기화 목록은 컴파일러에 의해 자동으로 생성됩니다. 이 목록은 기본 생성자를 사용하여 기본 클래스(A)와 멤버 필드(a)를 초기화합니다.

결론적으로 상속 시 생성자 및 소멸자 호출 순서는 특정 규칙을 따릅니다. 생성자는 기본 클래스를 먼저 초기화한 다음, 멤버 필드, 마지막으로 파생 클래스입니다. 소멸자는 정리 프로세스를 역순으로 호출합니다. 상속을 사용할 때 강력한 코드를 작성하려면 이러한 규칙을 이해하는 것이 필수적입니다.

위 내용은 C 상속에서 생성자와 소멸자 호출 순서는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿