24 I_Pointer *ptr; //指針成員
25 //減少引用計(jì)數(shù)
26 void release_ref_count(){
27 cout<<"release reference count"<
28 if(--(ptr->ref_count) == 1){
29 free_and_nil();
30 }
31 }
32 //增加引用計(jì)數(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指針的構(gòu)造函數(shù)
45 Has_Ptr(int *ptr): ptr(new I_Pointer(ptr)) {
46 add_ref();
47 }
48
49 Has_Ptr(){} //默認(rèn)構(gòu)造
50
51 Has_Ptr(const Has_Ptr &rhs){ //拷貝構(gòu)造
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 //原來的引用計(jì)數(shù)減1
63 release_ref_count();
64 memcpy(this, &rhs, sizeof(&rhs));
65 //新的引用計(jì)數(shù)加1
66 add_ref();
67 return *this;
相關(guān)推薦:2011計(jì)算機(jī)等級(jí)考試二級(jí)C輔導(dǎo)實(shí)例編程匯總
計(jì)算機(jī)等級(jí)考試二級(jí)C語言歷年真題匯總(2005-2010)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |