成都游戏Coder,记录游戏开发过程的笔记和心得!
都是这周看书以及代码的总结: Stl 中 auto_ptr只是众多可能的智能指针之一,auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理。 这里是一个简单的代码示例,如果没有auto_ptr,
如果在DealProcessAdoption有一个exception,会发生什么事情,因为ProcessAdoption不能捕获他,所以这段代码很危险,所以DealProcessAdoption后面的代码可能会跳过,造成内存泄露。如果利用try catch去捕获他,会搞得代码很乱,又缺少美观性。
所以Stl提供了一个智能指针来解决这个问题,我们可以先模拟实现一个智能指针的类实现。
这个版本和原先版本的差异只有二处,第一pa是一智能指针的对象,不是ALA*第二不用自己去释放delete
然后我看到Effective STL的条款8:永不建立auto_ptr的容器关于此可以看的Effective STL的条款8
因为auto_ptr并不是完美无缺的,它的确很方便,但也有缺陷,在使用时要注意避免。首先,不要将auto_ptr对象作为STL容器的元素。C++标准明确禁止这样做,否则可能会碰到不可预见的结果
auto_ptr的另一个缺陷是将数组作为auto_ptr的参数: auto_ptr<char> pstr (new char[12] ); //数组;为定义然后释放资源的时候不知道到底是利用delete pstr,还是 delete[] pstr;
然后收集了关于auto_ptr的几种注意事项:1、auto_ptr不能共享所有权。2、auto_ptr不能指向数组3、auto_ptr不能作为容器的成员。4、不能通过赋值操作来初始化auto_ptrstd::auto_ptr<int> p(new int(42)); //OKstd::auto_ptr<int> p = new int(42); //ERROR这是因为auto_ptr 的构造函数被定义为了explicit5、不要把auto_ptr放入容器
然后笔者从而推荐的是boost的shared_ptr,然后看完shared_ptr关于智能指针的介绍与例子。5种针对auto_ptr不足的指针如下:需要详细了解可以去查看相当文档,与测试新代码。
关于shared_ptr的使用其实和auto_ptr差不多,只是实现上有差别,关于shared_ptr的定义就不贴代码了,以为内开源,可以网上找1、shared_ptr<T> p(new Y);
要了解更多关于auto_ptr的信息,可以查看more effective c++ 的p158页条款28要了解shared_ptr 类模板信息,可以查看boost 1.37.0中文文档,而且支持数组的shared_array 类模板
posted on 2009-03-29 15:50 expter 阅读(31275) 评论(5) 编辑 收藏 引用 所属分类: 其他学习笔记 、算法与数据结构
good.. 回复 更多评论
Very good, EFF STL我白看了,博主帮我温习了一部分。 回复 更多评论
谢谢指点 回复 更多评论
写得不错 回复 更多评论
应该要重载 -> 和 * 吧 回复 更多评论
Powered by: C++博客 Copyright © expter