C++实现智能指针的简单案例
来源:互联网 发布:老九门百度云同步网络 编辑:程序博客网 时间:2024/05/08 17:15
以下案例只是一个简单的小程序,实现过程中主要是将辅助计数类当做共有的属性
#include <iostream>using namespace std;template <class T>class adv_smart_pointer;template <class T>class ref_cnt{friend class adv_smart_pointer<T>;public:ref_cnt(T *p) : data_pointer(p), cnt(1){}~ref_cnt(){if (data_pointer){delete data_pointer;cnt = 0;data_pointer = NULL;}}private:T *data_pointer;int cnt;};template <class T>class adv_smart_pointer{public:adv_smart_pointer() : cnt_pointer(NULL){}adv_smart_pointer(T *p) : cnt_pointer(new ref_cnt<T>(p)){}~adv_smart_pointer(){if (cnt_pointer){if (cnt_pointer->cnt > 0){--cnt_pointer->cnt;if (cnt_pointer->cnt == 0){delete cnt_pointer;cnt_pointer = NULL;}}}}adv_smart_pointer(const adv_smart_pointer& obj){if (&obj != NULL){cnt_pointer = obj.cnt_pointer;cnt_pointer->cnt ++;}}adv_smart_pointer &operator=(adv_smart_pointer &obj){if (this != &obj){if (cnt_pointer && cnt_pointer->cnt > 0){cnt_pointer->cnt --;if (cnt_pointer->cnt == 0){delete cnt_pointer;cnt_pointer = NULL;}}cnt_pointer = obj.cnt_pointer;cnt_pointer->cnt ++;}return *this;}T *operator->(){if (cnt_pointer ){return cnt_pointer->data_pointer;}else{return NULL;}}T &operator*(){if (cnt_pointer){return *(cnt_pointer->data_pointer);}else{throw "reference to NULL";} }private:ref_cnt<T> *cnt_pointer;};class adv_test{public:adv_test() : index(100){cout << "adv test print" << endl;}~adv_test(){cout << "destruct test print" << index << endl;}void set_index(int index){this->index = index;}void show(){cout << "adv test hello" << index << endl;}private:int index;};void obj_play_4(){adv_smart_pointer<adv_test> pointer1(new adv_test);adv_smart_pointer<adv_test> pointer2 = pointer1;adv_smart_pointer<adv_test> pointer3 = pointer2;adv_smart_pointer<adv_test> pointer4 = pointer3;pointer1 = pointer4;pointer1->set_index(80);pointer1->show();adv_smart_pointer<adv_test> new_pointer1(new adv_test);pointer1 = new_pointer1;pointer1->show();pointer4->show();}int main(){obj_play_4();return 0;}
1 0
- C++实现智能指针的简单案例
- 【C++】智能指针auto_ptr的简单实现
- 智能指针的简单实现
- 智能指针的简单实现
- 智能指针的简单实现
- 智能指针的简单实现
- 【C++】智能指针的实现
- [c++]智能指针的实现
- 智能指针原理,并实现一个简单的智能指针
- 简单实现智能指针
- 智能指针简单实现
- 一个简单的智能指针的实现
- 一个简单的智能指针的实现
- 最简单的智能指针实现方法
- 一个简单的智能指针实现
- shared_ptr智能指针的简单实现
- 智能指针auto_ptr的简单实现
- 简单的计数智能指针实现
- 取消Eclipse等号、分号、空格代码自动补全
- 2464 游戏
- javaWeb项目中连接MySQL出现无法加载驱动的问题
- 百度地图 修改定位图标 替换自己的图标
- 国际油价下跌,页岩油来势凶猛
- C++实现智能指针的简单案例
- android复习-逐帧动画
- 利用RadioButton以及ViewPager实现仿小米联系人页面
- 对信号的几种解释
- ES 聚合-先group 在sum
- sqlachemy 初探
- Linux的文件与目录权限
- C++ 串的堆分配存储表示
- 泛型