当前位置: 首页 > wzjs >正文

移动商城网站建设百度做推广一般要多少钱

移动商城网站建设,百度做推广一般要多少钱,购物网站建设平台,怎样推销网站建设前面介绍了工厂模式控制了智能指针和资源对象的创建过程,现在介绍一下智能指针是如何利用代理模式来实现“类指针(like-pointer)”的功能,并控制资源对象的销毁过程的。 2、代理模式 代理模式是为其它对象提供一种代理以控制对这…

前面介绍了工厂模式控制了智能指针和资源对象的创建过程,现在介绍一下智能指针是如何利用代理模式来实现“类指针(like-pointer)”的功能,并控制资源对象的销毁过程的。

2、代理模式

代理模式是为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不直接引用另一个对象,而是通过一个代理对象在客户端和目标对象之间起到中介的作用,这个代理对象提供了和目标对象完全一样的功能接口,客户端访问这个代理对象就像是在访问目标对象一样,同时代理对象根据需要在访问目标对象时进行了控制。智能指针就起到了客户端和裸指针的中介代理作用。

按照GOF的说法,组成代理模式的角色有:
主题角色(Subject):定义了代理角色和真实角色的共用接口方法,这样在任何使用真实角色的地方都有可以使用代理角色。
代理角色(Proxy):实现主题角色接口方法,是真实角色的代理,通过真实角色的业务逻辑方法来实现主题角色的接口方法,并可以附加自己的操作,对真实角色的行为进行控制。
真实角色(RealSubject):实现主题角色接口方法,定义了真实角色所要实现的业务逻辑,供代理角色调用。

代理模式的类结构如下图所示:
在这里插入图片描述

智能指针使用面向对象技术封装了C++中的裸指针,是裸指针的包装类,它按照RAII惯用法来管理指针资源,可以在失去生存期时同时把所管理的资源释放掉,得益于C++的操作符重载,智能指针提供了*、->等操作符,它的行为就像是指针,可以按照指针的形式来对智能指针对象进行操作,比如使用“*”操作符来解引用所指向的内容,使用“->”操作符来访问所指向的结构对象的成员,就像是在操作一个普通指针一样。

我们不妨脑洞大开一下,如果把“指针”当作是一种对象,使用面向对象进行设计的话,可以大体定义成类似下面的class:

template<typename T>
class pointer {
private:T *address; // 数据成员public:pointer(T *p);// 下面是成员函数T *operator++();T *operator--();T *operator+=(int offset);T *operator-=(int offset);T operator*();T operator[int index];T *operator->();delete();
}

再看unique_ptr和shared_ptr类,可以把它们当作是pointer基类的派生类,它们提供了pointer定义的成员方法,并且还包含了一个pointer指针。

以shared_ptr为例,可以视为下面的class:

class shared_ptr : public pointer {
private:pointer ptr; // 资源对象指针,指向被代理对象ref_count *refcnt; // 引用计数
public:shared_ptr(pointer p) {...其它操作ptr = p;}T operator*() {return *ptr;}T *operator->() {return ptr;}~shared_ptr() {...其它操作ptr->delete();}...其它成员函数
}

从类的结构形式上看,shared_ptr类继承于pointer类,并且拥有一个pointer类型的数据成员,正好符合代理模式的类结构图:基类pointer对应subject主题类,而shared_ptr类对应proxy代理类,shared_ptr还包含了一个类型为基类pointer的数据成员ptr,即被代理对象,在实践中就是裸指针。再看shared_ptr的功能,它public继承了pointer类,因此它对外提供了pointer类的接口,例如解引用操作符*和成员访问操作符->,当调用shared_ptr的这些接口时,它会把请求转发到数据成员ptr的对应接口上。同时它也对相关的接口做了控制,比如为了防止访问内存越界,没有提供指针的算术运算,更重要的是,它控制了资源对象的生存期管理,比如,只有在引用计数为0时才释放资源对象,这也正是智能指针的重要功能。也就说,shared_ptr对内包含了一个指针类型成员,对外又表现为一个指针类型,而且还对指针成员的行为做出了控制。这不正是代理模式吗?

由此可见,智能指针unique_ptr和shared_ptr的实现正是代理模式的典型应用。当然,如果严格地按照面向对象编程的特征,因为C++中没有“指针”类,指针只是C++固有的基本类型,可能不是标准的代理模式,虽然外在形式上不同,但确实表现出了代理模式的思想和意图:提供了与裸指针相同的功能,并把请求转发给裸指针处理,同时对裸指针的操作进行了控制(如不提供某种操作,或者限制使用),最核心的控制是能够对裸指针指向的资源对象进行了生存期管理。

此外,C++中还有另一种形式的“类指针”对象:迭代器,它也实现了*、->等操作符函数,而且还提供了++、–、+=、-=等算术操作符,对照代理模式来分析,它也是使用代理模式来实现的(注:它是标准的迭代器模式,这里关注的是它的“类指针”特性)。不过,智能指针作为指针的代理对象,控制的是被代理对象——指针的生存期管理,而迭代器作为“集合指针”(如指向数组的指针)的代理对象,控制的是对所代理的集合指针的遍历访问行为,可以不用关心底层的数据存储方式,同时控制访问时不会越界,显然它的核心功能是指针的算术操作,因为容器里存放的都是对象集合,不止一个,为迭代器提供指针的算术运算操作再正常不过了。

总之,尽管指针在编程使用时,容易发生内存泄漏、指针越界、野指针、重复释放等错误。但是通过它的代理对象-智能指针,可以很好的控制指针的行为,尽可能的避免了一些错误的发生。

如果说智能指针使用工厂模式控制了资源对象的创建过程,那它使用代理模式控制了资源对象的销毁过程:可以控制它在智能对象失去生存期时也立即销毁资源对象,如unique_ptr,也可以控制它在最后一个引用它的智能指针对象失去生存期时再销毁,如shared_ptr。

智能指针又是怎样释放资源对象的呢?下一篇文章介绍所使用的另一种设计模式。

http://www.dtcms.com/wzjs/152073.html

相关文章:

  • 调查网站赚钱怎么在网上销售
  • 公司不需要做网站了seo广告优化
  • 三只松鼠品牌案例分析网站优化教程
  • 校园类网站建设网站快速排名优化哪家好
  • 广州网站设计公司新闻seo查询seo优化
  • 做网站的图片取材免费推广神器
  • 网站膜拜销售企业网站建设专业服务
  • 程序员给别人做的网站违法了百度关键词排名
  • 建好了网站怎么做外贸百度广告代理公司
  • 大学生做微商网站展示型网站设计公司
  • 公司有些网站打不开谷歌浏览器官方app下载
  • 网站建设-英九网络活动策划
  • 不良网站进入窗口seo1现在怎么看不了
  • 网站空间大小多少合适百度信息流优化
  • 清远市建设工程交易中心网站windows优化大师怎么彻底删除
  • 虹口武汉阳网站建设广州线上教学
  • 武汉手机网站制作公司免费发帖的网站
  • 普陀网站建设代写软文
  • 营销型企业网站的建设步骤乐天seo培训
  • 静态网站更新怎么在百度上添加自己的店铺地址
  • 做网站公司职务唐山建站公司模板
  • 手机版做网站百度广告官网
  • 巢湖市网站建设优化厦门百度推广开户
  • 福州网站微信公众号公司seo是什么意思
  • 怎么建设自己的一个服务器网站想学手艺在哪里可以培训
  • 广西房地产网站建设推广接单平台
  • 陕西住房和城乡建设网站营销推广方案
  • 比特币矿池网站怎么做竞价托管公司
  • 网站制作有名 乐云践新专家合肥网络推广网络运营
  • 西部数据网站建设线上销售方案