boost库在工作(11)引用计数的智能指针weak_ptr

由于boost库里的shared_ptr采用引用计数的技术,这个技术天生就存在一个缺陷,就是不能存在循环引用的情况,因为这个缺点,引用计数的技术一直没有用到垃圾回收的算法里。既然存在这方面的问题,作为C++强大的boost库,一定会想办法解决的。因此,就提出另外一个智能指针weak_ptr。这个智能指针只对引用的指针进行保存,但不增加引用指针的计数,因而它不对shared_ptr的指针具有拥有权,...
阅读(2788) 评论(0)

boost库在工作(10)引用计数的智能指针shared_array

在共享指针里,有时也需要共享一个缓冲区,比如从网络收到数据,需要先放到缓冲区里,接着把这些数据发送给处理线程进行解包和处理。在这里就需要使用到两个线程里共享缓冲区的问题,因此比较好的解决方案,就采用引用计数的智能指针shared_array来解决,最为合适不过了。shared_array与shared_ptr具有相同的形式,使用和注意点也是相似的。具体的使用的例子如下:// boost_005.c...
阅读(2729) 评论(0)

boost库在工作(9)引用计数的智能指针shared_ptr之二

接着下来,需要演示一下怎么样在多个对象里共享一个对象,而不管每个对象的生命周期,就可以及时地把使用的对象在合适地方删除。下面的例子里先定义两个类,然后每个类都引用共享的对象,接着使用完成后,就会在析构函数里删除,可以从例子程序运行的输出结果看到内部运行的生命周期。有了共享智能指针,面对多个对象共享使用一个对象,这样的管理会方便很多。具体代码如下://在两个对象之间共享使用shared_ptr //...
阅读(3055) 评论(0)

boost库在工作(8)引用计数的智能指针shared_ptr之一

在前面已经介绍了三个智能指针,它们都是适合在局部作用域,不进行拷贝的情况下使用,最为合适,如果使用到其它情况,使用的好处跟坏处一样多,这种情况就不宜使用了。在目前多核处理器流行的今天,并发处理已经成为常事,因为多线程运行的高效性,界面操作人性化方面,都需要并发性处理。比如界面需要一直响应用户的操作,但后台的任务又需要有序地进行,只能阻塞在那里。这时,如果使用单线程,就显然人机操作界面不好了。在采用...
阅读(2787) 评论(0)

boost库在工作(7)使用数组智能指针scoped_array

学习过C++的开发人员,都知道在C++里数组指针与一般的指针是有区别的。比如使用数组形式分配的内存,就需要使用数组的形式删除。但初学开发的开发人员,往往会忘记这点,在我过去10多年的软件代码审查过程里,经常发现这点,如下面所示:char*  pBuf = new char[256];......这里使用delete pBuf;  在最后这行代码上,就使用出错了。应该使用数组的形式删除,否则只删除了...
阅读(3488) 评论(3)

“坑爹的LIST容器--删除操作千倍消耗CPU”一文有误,在VC2010里是STL完胜

下面是STL的测试情况:every 3 seconds add/del element number is 40000stl list has 40000 elementsadd cost time too much: 109stl list has 0 elementsdelete cost time too much: 4992*********************************...
阅读(2414) 评论(5)

boost库在工作(6)作用域智能指针scoped_ptr之五

通过前面智能指针的学习,应了解到std::auto_ptr的使用和局限性,从而引发boost库针对这些情况提供了更多的智能指针,其中scoped_ptr就是针对std::auto_ptr的而提供的。对开发人员来说,代码限制得越精确,编译器发现尽可能多的错误,就是越好的方式。比如想要某个变量不能改变它的值,就需要常量限定符,这样就可以杜绝任何不小心对变量的操作。在普通的指针里,也常常使用const来...
阅读(1991) 评论(0)

boost库在工作(5)作用域智能指针scoped_ptr之四

第二种情况,主要就是使用在调用异常抛出的函数的地方。如下面的例子://异常抛出的函数,适合使用智能指针。 //软件开发人员: 蔡军生 2013-02-03 void ThrowFun(void) { if (1) { throw "Test Throw!"; } } void TestCallThrow(void) { std::auto_ptr nVal(new int);...
阅读(1944) 评论(1)

boost库在工作(4)作用域智能指针scoped_ptr之三

标准模板库里的智能指针std::auto_ptr,一般情况下,只适合在函数中使用,当离开这个函数时,就可以自动删除分配的资源。典型的情况有两种,一种是当一个函数代码比较多,判断条件很多,这样出口很多。另一种就是带有异常机制的代码,因为异常没有抛出来之前,没有办法确定那行代码会突然间就退出来,这种情况下对资源管理,会给软件开发人员带来很大的压力,即使很有经验的开发人员,也有点防不防的,会花大量的时间...
阅读(1913) 评论(0)

boost库在工作(3)作用域智能指针scoped_ptr之二

智能指针的原理,其实就是利用C++的一个特性,当对象创建时,一定会调用构造函数;当对象离开作用域时,会自动调用析构函数。由于这两个函数的调用都是由编译器来生成的,不用怕不调用的危险,达到安全删除的目的。当然,智能指针使用了一个对象的构造和析构,显示增加了一些开销,但比起垃圾回收机制来说,是非常小的,基本可以忽略不计。 既然智能指针已经有这么多优点,迫不及待了吧,怎么样使用呢?下面就先来看看std:...
阅读(2106) 评论(2)

boost库在工作(2)作用域智能指针scoped_ptr之一

很久远以前,丹尼斯.里奇发明了C语言,这个语言有一个优点,就是可以动态地分配内存。当需要使用内存时,就可以立即向系统申请。当不需要时,又可以立即释放回给系统,再给别的程序使用。这种动态的内存管理,使得当时以K计算的内存时代,也可以处理很大数据量的软件出现。但这中使用函数malloc来分配内存,使用函数free来释放内存的机制,一直到今天,还在使用。不过,这种方式有一个缺点,就是当你不断地使用函数m...
阅读(2270) 评论(0)
    个人资料
    • 访问:5594063次
    • 积分:73134
    • 等级:
    • 排名:第25名
    • 原创:1587篇
    • 转载:61篇
    • 译文:11篇
    • 评论:2086条
    文章存档
    最新评论