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

一、智能指针

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

时间: 2024-10-20 22:30:03

TR1内的组件--智能指针、function的相关文章

(转)C++11里的智能指针

1. std::auto_ptr有些违背c++编程思想. 已经被"不建议使用了".2. 下文转自:http://blog.csdn.net/lanergaming/article/details/24273419 c#和java中有自动垃圾回收机制,.net运行时和java虚拟机可以管理分配的堆内存,在对象失去引用时自动回收,因此在c#和jva中, 内存管理不是大问题.c++语言没有垃圾回收机制,必须自己去释放分配的堆内存,否则就会内存泄露. 我相信大部分c++开发人员都遇到过内存泄露

C++ 智能指针(shared_ptr/weak_ptr)源码分析

C++11目前已经引入了unique_ptr, shared_ptr, weak_ptr等智能指针以及相关的模板类enable_shared_from_this等.shared_ptr实现了C++中的RAII机制,它不仅仅具有一般指针(build-in/raw)的特性,更重要的是它可以自动管理用户在堆上创建的对象的生命周期,让用户不用负责内存回收,避免内存泄漏.一般的智能指针都定义为一个模板类,它的类型由被管理的对象类型初始化,内部包含了指向该对象的指针以及指向辅助生命周期管理的管理对象的指针.

智能指针tr1::shared_ptr、boost::shared_ptr使用

对于tr1::shared_ptr在安装vs同时会自带安装,但是版本较低的不存在.而boost作为tr1的实现品,包含 "Algorithms Broken Compiler Workarounds Concurrent Programming Containers Correctness and Testing Data Structures Domain Specific Function Objects and Higher-order Programming Generic Progra

C++细节学习之智能指针auto_ptr和tr1::shared_ptr

为什么要用智能指针? 我们知道在C++中,资源管理是个头疼的问题.资源管理最常做的就是内存管理.而指针用起来如果忘记归还,就会导致内存泄露. 比如: class Oneclass{}; int func(){ Oneclass* one=new Oneclass; if(!one)return 1; delete one; return 0; } 可见,上面代码中,我们可以发现delete并没什么卵用,函数没有执行到delete,而是直接返回了1:最好的办法就是不用指针,使用对象来管理资源,因为

【深入了解cocos2d-x 3.x】内置数据结构(1)——智能指针

智能指针在C++11的标准中已经存在了,分别是unique_ptr,shared_ptr,weak_ptr,其中最常用的应该是share_ptr,它采用引用计数的方式管理内存,当引用计数为0的时候,自动释放内存,但是由于shared_ptr考虑到了线程安全,所以会存在有较大的性能损失.所以在实时游戏开发中,往往不会用到shared_ptr. 在cocos2d-x3.2以及更高的版本中,cocos2d-x提供了自己的智能指针方案--RefPtr,这套方案实际上也是模仿C++11中的shared_p

boost智能指针之shared_ptr和weak_ptr

std::auto_ptr很多的时候并不能满足我们的要求,比如auto_ptr不能用作STL容器的元素.boost的smart_ptr中提供了4种智能指针和2种智能指针数组来作为std::auto_ptr的补充. shared_ptr<boost/shared_ptr.hpp>:使用shared_ptr进行对象的生存期自动管理,使得分享资源所有权变得有效且安全. weak_ptr<boost/weak_ptr.hpp>:weak_ptr 是 shared_ptr 的观察员.它不会干

DirectX11--ComPtr智能指针

综述 DirectX11 With Windows SDK完整目录 欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报. IUnknown接口类 DirectX11的API是由一系列的COM组件来管理的,这些前缀带I的接口类最终都继承自IUnknown接口类.IUnknown的三个方法如下: 方法 描述 IUnknown::AddRef 内部引用计数加1.在每次复制了一个这样的指针后,应当调用该方法以保证计数准确性 IUnknown::QueryInter

智能指针简介

智能指针用于解决常规指针所带来的内存泄露.重复释放.野指针等内存问题.智能指针基于这样的事实得以发挥作用:定义在栈中的智能指针,当超出其作用域时,会自动调用它的析构函数,从而可以释放其关联的内存资源. 之前C++标准库中定义的智能指针std::auto_ptr<T>,因其设计存在缺陷,所以已不再推荐使用.C++11引入了新的智能指针:unique_ptr.shared_ptr和weak_ptr. 一:unique_ptr unique_ptr类似于auto_ptr.两个unique_ptr实例

More Effective C++ 条款28 Smart Pointers(智能指针)

1. 智能指针(如标准库的auto_ptr,shared_ptr,weak_ptr,boost的scoped_ptr等)主要用于动态内存的管理,同时提供给用户与内置指针一样的使用方法,本条款主要涉及智能指针在构造与析构,复制和赋值,解引等方面的注意点,而非智能指针的实现细节. 2. 智能指针的构造,赋值,析构 智能指针的copy constructor,assignment operator,destructor对应于不同的观念而有不同的实现,主要有三种选择: 1).不允许对象的共享,在调用co