码迷,mamicode.com
首页 > 其他好文 > 详细

TR1内的组件--智能指针、function

时间:2014-07-06 11:43:58      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:智能指针   c++   

一、智能指针

       tr1::shared_ptr和tr1::weak_ptr。前者的作用有如内置指针,但会记录有多少个tr::shared_ptrs共同指向同一个对象,这便是所谓的引用计数。一旦最后一个这样的指针被销毁,也就是一旦某一个对象的引用计数为0,这个对象会被自动删除。这在非环形数据结构中防止资源泄露很有帮助,但如果两个或多个对象内含tr1::shared_ptrs并形成环状,这个环形会造成每个对象的应用计数都超过0--即使指向这个环形的所有指针都已被销毁(也就是这一群对象整体看来已无法触及)。这就是为什么又有个tr1::weak_ptrs的原因。tr1::weak_ptrs的设计使其表现象是“非环形tr1::shared_ptr-based数据结构”中形成感生指针。tr1::shared_ptr并不参与应用计数的计算,当最后一个指向某对象的tr1::shared_ptr被销毁,纵使还有个tr1::weak_ptrs继续指向同一个对象,该对象仍旧会被删除,这种情况下的tr1::weak_ptrs会被自动标示无效。

      tr1::shared_ptr或许是拥有最广泛用途的TR1组件,

二、tr1::function

       此物得以标示任何可调之物,也就是任何函数或者函数对象,只要其签名符合目标,假设我们想注册一个callback函数,该函数接受一个int并返回一个string,我们可以这么写:

 void registerCallback(std::string func(int));  //参数类型是函数,该函数接受一个int并返回一个string

其中参数名称func可有可无,所以上述的registerCallback也可以这样声明:

void registerCallback(std::string (int));//与上同,参数名称略而未写,这一这里的"std::string (int)"是个函数签名。tr1::function使上述的registerCallback有可能更富弹性地接受任何可调用物,只有这个可调用物接受一个Int或任何可被转换为int的东西,并返回一个string或任何可被转换为string的东西,tr1::function是个template,以其目标函数的签名为参数,

void refisterCallback(std::tr1::function<std::string (int)> func);

//参数“func”接受任何可调用物  只要该“可调用物”的签名与"std::string (int)"一致

三、tr1::bind

        它能够做STL绑定器bindlst和bind2nd所做的每一件是,而又更多,和前任绑定器不同的是,tr1::binf可以和const以及non-const成员函数协同运作,可以和by-reference参数协同运作,而且他不需特殊协助就可以处理函数指针,所以我们调用tr1::bind之前不必再被什么ptr_fun,mem_fun或mem_fun_ref搞得一团混乱了,简单地说,tr1::binf是第二代绑定工具,比其前一代好得多。

(下面分别对上面的三个组件的使用方法简单介绍)

TR1内的组件--智能指针、function,布布扣,bubuko.com

TR1内的组件--智能指针、function

标签:智能指针   c++   

原文地址:http://blog.csdn.net/yusiguyuan/article/details/37077967

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!