管理指针成员
来源:互联网 发布:淘宝木偶困境 编辑:程序博客网 时间:2024/06/06 13:56
#include <iostream>#include "plain-ptr.h"#include "value-ptr.h"#include "smart-ptr.h"using namespace std;void test_AHasPtr(){int i = 42;AHasPtr p1(&i, 42);AHasPtr p2 = p1;cout << p2.get_ptr_val() << endl; // 输出是42p1.set_ptr_val(0);cout << p2.get_ptr_val() << endl; // 输出是0int *ip = new int(42);AHasPtr ptr(ip, 10);cout << ptr.get_ptr_val() << endl;delete ip;cout << ptr.get_ptr_val() << endl;}void test_CHasPtr(){int obj = 0;CHasPtr ptr1(obj, 42);CHasPtr ptr2(ptr1);cout << ptr1.get_ptr_val() << ", " << ptr1.get_int() << endl; // 0 和42cout << ptr2.get_ptr_val() << ", " << ptr2.get_int() << endl; // 0 和42ptr2.set_ptr_val(6);ptr2.set_int(66);cout << "修改后的:" << endl;cout << ptr1.get_ptr_val() << ", " << ptr1.get_int() << endl; // 0 和42cout << ptr2.get_ptr_val() << ", " << ptr2.get_int() << endl; // 6 和66}void test_BHasPtr(){int obj = 0;BHasPtr ptr1(&obj, 42);BHasPtr ptr2(ptr1);cout << ptr1.get_ptr_val() << ", " << ptr1.get_int() << endl; // 0 和42cout << ptr2.get_ptr_val() << ", " << ptr2.get_int() << endl; // 0 和42cout << "修改后的:" << endl;ptr2.set_ptr_val(6);ptr2.set_int(66);cout << ptr1.get_ptr_val() << ", " << ptr1.get_int() << endl; // 6 和42cout << ptr2.get_ptr_val() << ", " << ptr2.get_int() << endl; // 6 和66}int main(){cout << "常规指针:" << endl;test_AHasPtr();cout << endl << "值型类:" << endl;test_CHasPtr();cout << endl << "智能指针类:" << endl;test_BHasPtr();return 0;}
class AHasPtr{public:AHasPtr(int *p, int i) :ptr(p),val(i){}int *get_ptr() const { return ptr; }int get_int() const { return val; }void set_ptr(int *p) { ptr = p; }void set_int(int i) { val = i; }int get_ptr_val() const { return *ptr; }void set_ptr_val(int val) const { *ptr = val; }private:int val;int *ptr; // 指针复制就是浅复制,复制的是指针的地址,};
class U_Ptr{friend class BHasPtr; // 友元类,private:int *ip;size_t use; // 计数,U_Ptr(int *p) :ip(p), use(1) {}~U_Ptr() { delete ip; }};class BHasPtr{public:BHasPtr(int *p, int i) :ptr(new U_Ptr(p)), val(i){}BHasPtr(const BHasPtr &orig) :ptr(orig.ptr), val(orig.val) // 复制构造函数,{++ptr->use; // 讲计数器加一,}BHasPtr& operator=(const BHasPtr&); //赋值操作符,~BHasPtr() // 析构函数,将其计数减减,{if (--ptr->use == 0) delete ptr;}int *get_ptr() const { return ptr->ip; } // ptr->ip 这个代表的是智能指针里有一个普通指针int get_int() const { return val; }void set_ptr(int *p) { ptr->ip = p; }void set_int(int i) { val = i; }int get_ptr_val() const { return *ptr->ip; }void set_ptr_val(int val) const { *ptr->ip = val; }private:int val;//int *ptr; // 指针复制就是浅复制,复制的是指针的地址,U_Ptr *ptr; // 这个是智能指针,U_ptr是一个智能指针类,};BHasPtr& BHasPtr::operator = (const BHasPtr& rhs){++rhs.ptr->use; // 右边的++if (--ptr->use == 0) delete ptr; // 左边的——ptr = rhs.ptr;val = rhs.val;return *this;}
class CHasPtr{public:CHasPtr(const int &p, int i) :ptr(new int (p)), val(i){}CHasPtr(const CHasPtr &orig):ptr(new int(*orig.ptr)), val(orig.val) {} // 这个是复制构造函数,CHasPtr& operator = (const CHasPtr&); // 赋值操作符,~CHasPtr() { delete ptr; } // 析构函数,int *get_ptr() const { return ptr; }int get_int() const { return val; }void set_ptr(int *p) { ptr = p; }void set_int(int i) { val = i; }int get_ptr_val() const { return *ptr; }void set_ptr_val(int val) const { *ptr = val; }private:int val;int *ptr; // 指针复制就是浅复制,复制的是指针的地址,};CHasPtr& CHasPtr::operator = (const CHasPtr &rhs){*ptr = *rhs.ptr;val = rhs.val;return *this;}
0 0
- 13.5 管理指针成员
- 管理指针成员
- 管理指针成员
- C++管理指针成员
- c++ 管理指针成员
- 管理指针成员
- C++管理指针成员
- 管理指针成员
- 管理指针成员
- 类的指针成员管理
- 类的指针成员管理
- 类指针型成员管理
- 类中的指针成员管理
- 管理类中的指针成员
- 管理类中的指针成员
- C++ 管理智能指针成员
- 复制控制(管理指针成员)
- 管理指针成员(九)
- Android:微信授权登录与微信分享全解析
- Java内存分配和String类型的深度解析
- Java - 多线程
- DOM对象编程练习小结
- 欢迎使用CSDN-markdown编辑器
- 管理指针成员
- Android系统组件BroadcastReceiver
- webView的使用
- 利用Spring AOP 更新memcached 缓存策略的实现(一)
- 读书笔记| (三)ARM9 嵌入式学习:ARM实验篇
- 英文歌曲:Yesterday Once More(昨日重现)
- 集合-Set
- Android画图工具——Canvas
- 第三周项目3:输出星号图