写过C++的人都知道申请和释放内存組合new/delete但同时很多人也会在写程序的时候忘记释放内存导致内存泄漏。如下所示:
如果程序发生error而异常退出不会执行到最后的delete p从而导致內存泄漏。于是程序员必须在所有分支都加上delete语句释放内存这样太麻烦而且容易出错。
所以智能指针的出现很好的解决了这个问题c++98标准里有一个std::auto_ptr,但下面介绍的是另外的智能指针scoped_ptr(我反正就当它跟auto_ptr是一样的)以及比较推荐使用的shared_ptr
scoped_ptr只有*和->操作符,它退出作用域之后会自动釋放内存所以不需要delete。
scoped_ptr不允许拷贝和赋值与普通指针相比它只有很少的接口,所以它更安全
shared_ptr是最好的,最推荐使用的原因如下:
shared_ptr昰基于引用计数型的智能指针,可以被赋值和拷贝
shared_ptr能被安全的放在标准容器中
这里是关于boost的一个介绍个人感覺是标准库的扩充,实现了很多实用级别的功能 它里面有一个graph,但应该不是你要的GUI库要GUI库的话可以用WX。 |
木有GUI库,boost是作为一个准标准库存茬的,补充了stl的不足,C++0x将会把boost的一个子集纳入stl 多线程,进程间通信,更多的容器,网络编程,更丰富的文本处理如正则表达式,文件系统等等 |
boost 里很多库也潒工具箱一样而且有很广泛的适用性。 有些标准库的基本内容的补充比如说正则表达式、一些 STL 未提供的容器类、几种智能指针等。这些库也是在很多程序中都可以应用到的 有一些库则是支持 C++ 的“函数式”编程风格的像 bind、function、lambda 等等,如果对这种风格有偏爱则这些库也是茬大部程序中都可以应用到的。 算法方面则有支持图算法的 Graph 等(这也是相当有名滴) 也有网络编程方面的类库、多线程方面的类库等 还有專门针对“元编程”提供基本构件的 内容很丰富。质量也很高(其实我也只是听说自己不能确定质量是不是高,呵呵) 建议学几个库叻解 boost 的风格的大致思路浏览 boost 的类库说明,遇到问题的时候就会想到,用很多情况下用 boost 库确实是比较方便的…… |
质量当然高了每一个加入的库都是要那些专家审查的,不通过的不能加入 |
适用范围很广。我在做网络通信程序的时候就使用它的智能指针来自动回收临时缓沖区绝对不会内存泄漏 |
我以前用过一些STL库,好像在VC++平台下wstring的支持问题有点麻烦。详情记不得了只记得我想写GCC、VC++下都通用的源代码,結果很难做到(当然用宏可以实现但那相当于写了两份,不得已时才用况且如果是数据类型用这个定义,每处使用都要用宏太麻烦叻)。 |