c++ 智能指针
来源:互联网 发布:在哪里转让淘宝店铺 编辑:程序博客网 时间:2024/05/10 10:15
auto_ptr:
auto_ptr存在隐式的所有权转换,在c11的标准中使用新的智能指针来代替。不能用于管理动态分配的数组,被复制和赋值时也会发生所有权转换,也就不能用于标准容器器类型之中,在c11中可以使用其它的方式代替。
使用auto_ptr常见的有两种场景,一是作为智能指针传递到产生auto_ptr的函数外部,二是使用auto_ptr作为RAII管理类,在超出auto_ptr的生命周期时自动释放资源。
对于第1种场景,可以使用boost::shared_ptr或者是std::tr1::shared_ptr(在C++11标准中是std::shared_ptr)来代替。
对于第2种场景,可以使用boost::scoped_ptr或者C++11标准中的std::unique_ptr来代替。其中std::unique_ptr是std::auto_ptr的代替品,支持显式的所有权转移
shared_ptr:
shared_ptr的作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting)。一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。这在非环形数据结构中防止资源泄露很有帮助。
weak_ptr:
weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作,它可以从一个shared_ptr或另一个weak_ptr对象构造,它的构造和析构不会引起引用记数的增加或减少。没有重载*和->但可以使用lock获得一个可用的shared_ptr对象
weak_ptr的一个重要用途是通过lock获得this指针的shared_ptr,使对象自己能够生产shared_ptr来管理自己,但助手类enable_shared_from_this的shared_from_this会返回this的shared_ptr,只需要让想被shared_ptr管理的类从它继承即可
unique_ptr:
unique_ptr它持有对对象的独有权——两个unique_ptr不能指向一个对象,不能进行复制操作只能进行移动操作。unique_ptr在超出作用域,即以下情况时它指向的对象会被摧毁:
unique_ptr指向的对象被破坏对象通过operator=()或reset()被指定到另一个指针)
unique_ptr还可能没有对象,这种情况被誉为empty。
例如:
std::unique_ptr<int>p1(newint(5));
std::unique_ptr<int>p2=p1;// 编译会出错
std::unique_ptr<int>p3=std::move(p1);// 转移所有权, 现在那块内存归p3所有, p1成为无效的针.
p3.reset();//释放内存.
p1.reset();//实际上什么都没做.
allocator
allocator类是C++的一个模板,它提供类型化的内存分配以及对象的分配和撤销。
- c++:智能指针
- C++:智能指针
- 【C++】智能指针
- 【C++】智能指针
- C++PJ智能指针
- 【c++】智能指针
- 【C++】智能指针auto_ptr
- C++,智能指针
- C++,boost智能指针
- 智能指针模拟C
- [C++]智能指针
- 【C++】 浅析智能指针
- C++_智能指针
- C++:初识智能指针
- C++::智能指针
- 【C++】智能指针
- c智能指针:unique_ptr
- 【C++】智能指针
- 如何用DOS命令批量修改文件后缀
- 平时积累的小技巧,notepad++
- 利用resteasy框架构建rest webservice----第一波:快速构建HelloWorld(实例、教程)
- C# 线程实践 - 验证测试
- POJ 2481 Cows
- c++ 智能指针
- 30岁以上的女人应选择什么品牌的眼霜?
- Android开发学习网址记录(更新中....)
- 怎样防止眼睛近视加重
- 镶嵌数据集发布为ImageService服务
- 利用resteasy框架构建rest webservice----第二波:使用不同的方式让resteasy发布我们的restful webservice 服务(实例、教程)
- hdu1963 Investment(完全背包)
- TLD算法
- OCP-1Z0-053-V13.02-537题