サブクラスには複数のオブジェクトがあり、(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. サブクラス オブジェクトを作成するときのコンストラクターの呼び出し順序:
静的データ メンバーのコンストラクター -> 親クラスのコンストラクター -> 非静的データ メンバーのコンストラクター -> 独自のコンストラクター 注: オブジェクトがいくつ作成されても、クラスの静的メンバーは 1 回だけ構築されるため、静的メンバーのコンストラクターは 1 回だけ呼び出され

ます

2. サブクラスのデストラクタの呼び出し順序は、サブクラスのコンストラクタの呼び出し順序と逆です。
覚えておいてください、逆のことをしてください。

3. 静的オブジェクトはプログラムの終了時に破棄されるため、
プログラムの終了前に静的メンバーのデストラクターは呼び出されません。

おすすめ

転載: blog.csdn.net/weixin_46060711/article/details/123932542
おすすめ