大坡3D软件开发

因我而不同--用软件来改变世界

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

由于boost库里的shared_ptr采用引用计数的技术,这个技术天生就存在一个缺陷,就是不能存在循环引用的情况,因为这个缺点,引用计数的技术一直没有用到垃圾回收的算法里。既然存在这方面的问题,作为C++强大的boost库,一定会想办法解决的。因此,就提出另外一个智能指针weak_ptr。这个智...

2013-02-24 21:35:53

阅读数:3111

评论数:0

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

在共享指针里,有时也需要共享一个缓冲区,比如从网络收到数据,需要先放到缓冲区里,接着把这些数据发送给处理线程进行解包和处理。在这里就需要使用到两个线程里共享缓冲区的问题,因此比较好的解决方案,就采用引用计数的智能指针shared_array来解决,最为合适不过了。shared_array与shar...

2013-02-22 21:52:56

阅读数:2893

评论数:0

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

接着下来,需要演示一下怎么样在多个对象里共享一个对象,而不管每个对象的生命周期,就可以及时地把使用的对象在合适地方删除。下面的例子里先定义两个类,然后每个类都引用共享的对象,接着使用完成后,就会在析构函数里删除,可以从例子程序运行的输出结果看到内部运行的生命周期。有了共享智能指针,面对多个对象共享...

2013-02-19 20:34:23

阅读数:3406

评论数:0

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

在前面已经介绍了三个智能指针,它们都是适合在局部作用域,不进行拷贝的情况下使用,最为合适,如果使用到其它情况,使用的好处跟坏处一样多,这种情况就不宜使用了。在目前多核处理器流行的今天,并发处理已经成为常事,因为多线程运行的高效性,界面操作人性化方面,都需要并发性处理。比如界面需要一直响应用户的操作...

2013-02-17 13:06:36

阅读数:3041

评论数:0

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

学习过C++的开发人员,都知道在C++里数组指针与一般的指针是有区别的。比如使用数组形式分配的内存,就需要使用数组的形式删除。但初学开发的开发人员,往往会忘记这点,在我过去10多年的软件代码审查过程里,经常发现这点,如下面所示:char*  pBuf = new char[256];......这...

2013-02-07 21:31:11

阅读数:3760

评论数: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 t...

2013-02-05 22:00:58

阅读数:2627

评论数:5

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

通过前面智能指针的学习,应了解到std::auto_ptr的使用和局限性,从而引发boost库针对这些情况提供了更多的智能指针,其中scoped_ptr就是针对std::auto_ptr的而提供的。对开发人员来说,代码限制得越精确,编译器发现尽可能多的错误,就是越好的方式。比如想要某个变量不能改变...

2013-02-05 20:58:58

阅读数:2188

评论数:0

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

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

2013-02-04 21:58:21

阅读数:2131

评论数:1

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

标准模板库里的智能指针std::auto_ptr,一般情况下,只适合在函数中使用,当离开这个函数时,就可以自动删除分配的资源。典型的情况有两种,一种是当一个函数代码比较多,判断条件很多,这样出口很多。另一种就是带有异常机制的代码,因为异常没有抛出来之前,没有办法确定那行代码会突然间就退出来,这种情...

2013-02-03 11:11:52

阅读数:2085

评论数:0

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

智能指针的原理,其实就是利用C++的一个特性,当对象创建时,一定会调用构造函数;当对象离开作用域时,会自动调用析构函数。由于这两个函数的调用都是由编译器来生成的,不用怕不调用的危险,达到安全删除的目的。当然,智能指针使用了一个对象的构造和析构,显示增加了一些开销,但比起垃圾回收机制来说,是非常小的...

2013-02-02 23:42:16

阅读数:2303

评论数:2

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

很久远以前,丹尼斯.里奇发明了C语言,这个语言有一个优点,就是可以动态地分配内存。当需要使用内存时,就可以立即向系统申请。当不需要时,又可以立即释放回给系统,再给别的程序使用。这种动态的内存管理,使得当时以K计算的内存时代,也可以处理很大数据量的软件出现。但这中使用函数malloc来分配内存,使用...

2013-02-01 23:37:55

阅读数:2583

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭