c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2653字,纯文字阅读大概需要4分钟。
内容图文
一个简单的point坐标类
class Point {
public:
Point():xval(0),yval(0){}
Point(int x,int y):xval(x),yval(y){}
int x()const { return xval; }
int y()const { return yval; }
Point& x(int xv) { xval = xv; return *this; }
Point& y(int yv) { yval = yv; return *this; }
private:
int xval, yval;
};
将handle 绑定到其上 进行一层封装
通过handle控制那些操作可以公开 那些操作私有 阻止用户对point的地址的操作
更重要的是提供 point的引用计数 将多个handle绑定到ppint上 当全部释放对point的使用权时
才进行释放point的操作
那么增加两个类
一个引用计数类 class UPoint
class UPoint {
friend class Handle;
Point p;
int u;
UPoint() :u(1) {}
UPoint(int x, int y) :p(x, y), u(1) {}
UPoint(const Point& p0):p(p0),u(1){}
};
一个是handle句柄类 包含UPoint的指针 构造和析构的时候会将计数+1
当计数到0 则释放指针内存
class Handle {
public:
Handle();
Handle(int, int);
Handle(const Point&);
Handle(const Handle&);
Handle& operator=(const Handle&);
~Handle();
int x()const;
Handle& x(int);
int y()const;
Handle& y(int);
private:
UPoint* up;
};
全部代码如下:
1 // sample0.cpp: 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 7class Point { 8public: 9 Point():xval(0),yval(0){} 10 Point(int x,int y):xval(x),yval(y){} 11int x()const { return xval; } 12int y()const { return yval; } 13 Point& x(int xv) { xval = xv; return *this; } 14 Point& y(int yv) { yval = yv; return *this; } 15private: 16int xval, yval; 17}; 1819class UPoint { 20 friend class Handle; 21 Point p; 22int u; 2324 UPoint() :u(1) {} 25 UPoint(int x, int y) :p(x, y), u(1) {} 26 UPoint(const Point& p0):p(p0),u(1){} 27}; 2829class Handle { 30public: 31 Handle(); 32 Handle(int, int); 33 Handle(const Point&); 34 Handle(const Handle&); 35 Handle& operator=(const Handle&); 36 ~Handle(); 37int x()const; 38 Handle& x(int); 39int y()const; 40 Handle& y(int); 41private: 42 UPoint* up; 43}; 4445 Handle::Handle() :up(new UPoint) {} 46 Handle::Handle(int x, int y) : up(new UPoint(x, y)) {} 47 Handle::Handle(const Point& p) : up(new UPoint(p)) {} 4849 Handle::~Handle() { 50if (up->u == 0) 51 delete up; 52} 5354 Handle::Handle(const Handle& h) :up(h.up) { ++up->u; } 55 Handle& Handle::operator=(const Handle& h) { 56 ++h.up->u; 57if (--up->u == 0) { 58 delete up; 59 } 60return *this; 61} 6263int Handle::x()const { return up->p.x(); } 64int Handle::y()const { return up->p.y(); } 6566 Handle& Handle::x(int x0) 67{ 68 up->p.x(x0); 69return *this; 70} 7172 Handle& Handle::y(int y0) { 73 up->p.y(y0); 74return *this; 75} 767778int main() 79{ 80 Handle h; 81 std::cout << h.x() << "" << h.y() << std::endl; 82return0; 83 }
原文:http://www.cnblogs.com/itdef/p/7830880.html
内容总结
以上是互联网集市为您收集整理的c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?)全部内容,希望文章能够帮你解决c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。