24 I_Pointer *ptr; //指針成員
25 //減少引用計數(shù)
26 void release_ref_count(){
27 cout<<"release reference count"< 28 if(--(ptr->ref_count) == 1){ 29 free_and_nil(); 30 } 31 } 32 //增加引用計數(shù) 33 void add_ref(){ 34 cout<<"add reference count"< 35 ++(ptr->ref_count); 36 } 37 //指針釋放 38 void free_and_nil(){ 39 delete ptr; 40 ptr = NULL; 41 } 42 43public: 44 // 帶int指針的構造函數(shù) 45 Has_Ptr(int *ptr): ptr(new I_Pointer(ptr)) { 46 add_ref(); 47 } 48 49 Has_Ptr(){} //默認構造 50 51 Has_Ptr(const Has_Ptr &rhs){ //拷貝構造 52 memcpy(this, &rhs, sizeof(rhs)); 53 add_ref(); 54 } 55 56 ~Has_Ptr(){ 57 release_ref_count(); 58 } 59 60 //賦值 61 Has_Ptr &operator=(const Has_Ptr &rhs){ 62 //原來的引用計數(shù)減1 63 release_ref_count(); 64 memcpy(this, &rhs, sizeof(&rhs)); 65 //新的引用計數(shù)加1 66 add_ref(); 67 return *this;
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |