[C ++、ベーシック、02]と制御対象の初期化シーケンスのデストラクタ

ObjDef.h

1  / * 
2  *
 3  *日:2019年9月7日
 4  *
 5   * / 
6  
7  #ifndefの_H_H_OBJ_DEF_H_H_
 8  の#define _H_H_OBJ_DEF_H_H_
 9  
10の#include <iostreamの>
 11  
12  クラスOBJA
 13  {
 14  公共15      OBJA(){のstd ::裁判所未満<< " 構築OBJA " << はstd ::てendl; }
 16      〜OBJA(){のstd :: COUT << " 自爆OBJA " << はstd :: ENDL。}
 17  }。
18の 
19  クラスObjB
 20  {
 21  公共22      ObjB(){のstd :: COUT << " ObjBを構築し、" << はstd :: ENDL。}
 23      〜ObjB(){のstd :: COUT << " 自爆ObjB " << はstd :: ENDL。}
 24  }。
25  
26  クラスにObjC
 27  {
 28  公共29      にObjC(){のstd :: COUT << " にObjCを構築し、" << はstd :: ENDL。}
 30      〜にObjC(){のstd :: coutの<<破壊にObjC " << はstd :: ENDL;}
 31  };
 32  
33  #ENDIF

問題の説明:

オブジェクトが複数ある場合、各オブジェクトは、初期化および破壊を制御する方法は?

方法1:

ポインタを使用します。

次のコード:

1  / * 
2  *
 3  *日:2019年9月7日
 4  *
 5   * / 
6  
7の#include <入出力ストリーム>
 8  
9の#include " ObjDef.h " 
10  
11  のint main()の
 12  {
 13      OBJA * pAObj = NULL;
14      ObjB * PBOBJ = NULL;
15      にObjC * pCObj = NULL;
16  
17      // フリストはObjBオブジェクトを初期化します。
18      PBOBJ = 新しいObjB()。
19  
20      //次にObjC 
21      pCObj = 新たにObjC()。
22  
23      // 次にOBJA 
24      pAObj = 新しいOBJA()。
25      
26      のstd :: coutの<< " Hello Worldの" << はstd ::てendl;
27  
28      // フリスト自由にObjC 
29      削除pCObjを。
30  
31      // 次にOBJA 
32      削除pAObjと、
33  
34      // 次にObjB 
35      削除PBOBJと、
36  
37  
38      戻り 0;
39 }

結果:

 

 要約:

新しいキーワード、割り当てられたオブジェクトを使用する場合は、オブジェクトのコンストラクタを呼び出します。

Deleteキーを使用する場合は、オブジェクトによって占有されていたメモリを解放し、オブジェクトのデストラクタを呼び出します。

方法2:

ローカル静的オブジェクトを使用してください。図に示される以下のコード。

1の#include <iostreamの>
 2  
3の#include " ObjDef.h " 
4  
5 OBJA&theObjA()
 6  {
 7      静的OBJA。
8      返します9  }
 10  
11 ObjB&theObjB()
 12  {
 13      静的ObjBのB。
14      リターンB;
15  }
 16  
17にObjC&theObjC()
 18  {
 19      静的にObjCのC;
20      リターンC。
21 }
 22  
23  
24  のint main()の
 25  {
 26      // フリストOBJA 
27      OBJA&A = theObjA()。
28  
29      // 次のページにObjC 
30      にObjC&C = theObjC()。
31  
32      // 次にObjB 
33      ObjB&B = theObjB()。
34  
35      のstd :: coutの<< " Hello Worldの" << はstd ::てendl;
36 }

結果:

 

 概要分析:

 関連の関数を呼び出すときに終了し、メイン関数が実行され、それは逆の順序でリリースされる、オブジェクトの初期化を完了し、ローカル静的オブジェクトを使用してください。

 

おすすめ

転載: www.cnblogs.com/AiLun/p/11483042.html