スマートポインタ
-
メモリリークの問題を軽減するために、
-
ポインタは、ネイティブの代わりに使用しました
-
陸軍規制:ヒープオブジェクトまたは変数空間にのみ指すことができます
-
方法
-
にデストラクタスマートポインタを削除する呼び出し
-
過負荷「 - >」演算子オーバーロードの一員として機能し、パラメータを持つことができません
-
スマートポインタ演算を禁止
-
スペースの1対だけのスマートポインタに向けることができます
例
1の#include <iostreamの> 2の#include < ストリング > 3 4 使用して 名前空間STD。 5つの 6 クラスPersion 7 { 8 文字列名; 9 int型の年齢; 10 公衆: 11 Persion(文字列名、int型の年齢) 12 { 13 本 - >名= 名。 14 本 - >年齢= 年齢; 15 COUT << " Persion()"<< てendl; 16 } 17 18 空隙ショー() 19 { 20 COUT << " NAME = " <<名<< ENDL。 21 裁判所未満<< " 年齢= " <<年齢<< てendl; 22 } 23 24 〜Persion() 25 { 26 COUT << " 〜Persion()" << ENDL。 27 } 28 }。 29 30テンプレート<型名T> クラスポインタ 32 { 33 のT *のm_ptr。 34 公衆: 35 ポインタ(Tの*のPTR) 36 { 37 m_ptr = PTR。 38 } 39 40 ポインタ(CONSTポインタ&その他) 41 { 42 m_ptr = other.m_ptr。 43 はconst_cast <ポインタ&>(他の).m_ptr = NULL; 44 } 45 46 ポインタ&演算子 =(CONSTポインター&他の) 47 { 48 であれば(この!=&その他) 49 { 50 であれば(m_ptr) 51 { 52 削除m_ptr。 53 } 54 55 m_ptr = other.m_ptr。 56 はconst_cast <ポインタ&>(他の).m_ptr = NULL; 57 } 58 リターン * この; 59 } 60 61 のT *の演算子 - > () 62 { 63 リターンm_ptr。 64 } 65 66 〜ポインタ() 67 { 68 であれば(m_ptr) 69 { 70 削除m_ptr。 71 } 72 m_ptr = NULL; 73 } 74 }。 75 76 のint main()の 77 { 78 ポインタ<Persion> P = 新しい Persion(" zhangsan "、20 ); 79 ポインター<Persion> P1 =ヌル; 80の P1 = P。 81 P1-> ショー(); 82 リターン 0 ; 83 }