>백엔드 개발 >C++ >C에서 클래스 멤버는 어떻게 초기화되고 삭제됩니까?

C에서 클래스 멤버는 어떻게 초기화되고 삭제됩니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-08 10:02:02190검색

In C  , How are Class Members Initialized and Destroyed?

클래스 멤버의 초기화 및 소멸 순서

C에서는 클래스 멤버의 초기화 및 소멸 순서가 객체 수명 관리에 중요한 역할을 합니다. 이 동작을 일반적으로 "생성자 및 소멸자 호출 순서"라고 합니다.

멤버 초기화 순서

C 표준에서는 멤버 변수가 멤버 변수가 생성된 순서대로 초기화되도록 지정합니다. 클래스 정의 내에서 선언됩니다. 이 순서는 기본 클래스가 파생 클래스보다 먼저 초기화되고 비정적 데이터 멤버가 나타나는 순서대로 초기화되도록 보장합니다.

멤버 삭제 순서

역순 회원파기시 적용됩니다. 소멸자는 초기화의 역순으로 호출됩니다. 파생 클래스 소멸자는 기본 클래스 소멸자보다 먼저 호출되고 비정적 데이터 멤버 소멸자는 선언의 역순으로 호출됩니다.

다음 프로그램을 고려해보세요.

#include <iostream>
using namespace std;

struct A
{
    A() { cout << "A::A" << endl; }
    ~A() { cout << "A::~" << endl; }
};

struct B
{
    B() { cout << "B::B" << endl; }
    ~B() { cout << "B::~" << endl; }
};

struct C
{
    C() { cout << "C::C" << endl; }
    ~C() { cout << "C::~" << endl; }
};

struct Aggregate
{
    A a;
    B b;
    C c;
};

int main()
{
    Aggregate a;
    return 0;
}

이 프로그램이 실행되면 다음과 같은 출력이 생성됩니다.

A::A
B::B
C::C
C::~
B::~
A::~

예상대로 Aggregate의 멤버는 A 순서로 초기화됩니다. , B, C 및 해당 소멸자는 역순으로 호출됩니다.

따라서 C는 클래스 멤버와 집계 유형 모두에 대해 멤버가 선언 순서대로 초기화되고 역순으로 소멸되도록 보장합니다.

위 내용은 C에서 클래스 멤버는 어떻게 초기화되고 삭제됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.