하위 클래스에는 여러 객체가 있는데, (1) 하위 클래스 객체를 생성할 때 생성자 호출 순서, (2) 프로그램 실행이 종료될 때 소멸자 호출 순서

#include <iostream>

using namespace std;

class M {
    
    
public:
	M() {
    
     cout << __FUNCTION__ << endl; }
	~M() {
    
     cout << __FUNCTION__ << endl; }
};

class N {
    
    
public:
	N() {
    
     cout << __FUNCTION__ << endl; }
	~N() {
    
     cout << __FUNCTION__ << endl; }
};

class A {
    
    
public:
	A() {
    
     cout << __FUNCTION__ << endl; }
	~A() {
    
     cout << __FUNCTION__ << endl; }
};

class B : public A {
    
    
public:
	B() {
    
     cout << __FUNCTION__ << endl; }
	~B() {
    
     cout << __FUNCTION__ << endl; }
private:
	M m1;
	M m2;
	static N ms;
};

N B::ms;

int main(void) {
    
    
	{
    
    
		B b;
		printf("\n\n*************\n\n");
		B c;
		printf("\n\n*************\n\n");
	}

	system("pause");
	return 0;
}

출력은 다음과 같습니다.
여기에 이미지 설명 삽입
아무 키나 누른 후:
여기에 이미지 설명 삽입
1. 서브클래스 객체를 생성할 때 생성자의 호출 순서:
정적 데이터 멤버의 생성자 -> 부모 클래스의 생성자 -> 비정적 데이터 멤버의 생성자 -> 자체 생성자 참고: 생성된 객체의 수에 관계없이 클래스의 정적 멤버는 한 번만 생성되므로 정적 멤버의 생성자는 한 번만 호출

됩니다
!!!

2. 하위 클래스 소멸자의 호출 순서는 하위 클래스 생성자의 호출 순서와 반대입니다! ! !
반대로 하십시오.

3. 정적 개체는 프로그램이 종료될 때 소멸되므로
프로그램이 끝나기 전에 정적 멤버의 소멸자가 호출되지 않습니다!

추천

출처blog.csdn.net/weixin_46060711/article/details/123932542