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 }
結果:
概要分析:
関連の関数を呼び出すときに終了し、メイン関数が実行され、それは逆の順序でリリースされる、オブジェクトの初期化を完了し、ローカル静的オブジェクトを使用してください。