boost库学习之 scoped_ptr scoped_array
来源:互联网 发布:python post上传图片 编辑:程序博客网 时间:2024/06/05 03:58
boost.smart_ptr库提供了六种智能指针:scoped_ptr、scoped_array、shared_ptr、shared_array、week_ptr和intrusive_ptr。说到智能指针,我们会想到c++98标准中的自动指针auto_ptr.auto_ptr获取指针所有权后,离开作用域时自动释放该指针指向的堆内存。也可以转移指针的所有权。auto_ptr<A> ap_a1(new A);auto_ptr<A> ap_a2(ap_a1); //发生所有权转移,此时ap_a1不再管理申请的A对象if (ap_a1.get() == nullptr)cout << "ap_a1.get() == nullptr" << endl; //输出ap_a1.get() == nullptrif (ap_a2.get() == nullptr)cout << "ap_a2.get() == nullptr" << endl;scoped_ptr是一个很类似auto_ptr的智能指针。但scoped_ptr的所有权不能转让。scoped_ptr把拷贝构造函数和赋值操作符声明为私有,重载了*和->操作符,因此可以把scoped_ptr当作指针一样使用。需要包含<boost/scoped_ptr.hpp>头文件,引用boost命名空间void func(){scoped_ptr<A> sp_a1(new A);sp_a1->print(); //支持普通指针的*、->操作符sp_a1.get()->print(); //成员函数get返回持有的指针sp_a1.reset(new A); //reset不再持有之前的指针,删除指针,并持有新指针,会调用A类的析构函数sp_a1++; //错误,未定义递增操作符scoped_ptr<A> sp_a2(sp_a1); //错误,不支持指针所有权转移}不需要delete操作,scoped_ptr会自动帮我们释放资源,所以如果在之前对指针delete,scoped_ptr析构时再对指针delete可能会发生未定义行为。scoped_ptr不会向auto_ptr一样转移指针所有权,会减少错误的发生,没有多余的操作,保证了与原始指针同样的效率,代码也更清晰。scoped_arrayscoped_array类似scoped_ptr,接口和功能几乎是与scoped_ptr相同,弥补了标准库中没有指向数组的智能指针的缺憾。速度与原始数组几乎一样快,但不支持动态增长数组。不支持迭代器,不能搭配STL算法。注意:1.scoped_array接受的指针必须是new[]的结果,不能是new表达式的结果2.scoped_array没有重载*、 ->操作符3.重载了[]操作符,可以向普通数组用下标访问。scoped_array<int> sa(new int[100]); //包装动态数组sa[0] = 10; //正确,重载了[]*(sa + 1) = 20; //错误, 没有重载*{ scoped_array<int> sa(new int[100]);} //退出作用域自动释放数组资源
0 0
- boost库学习之 scoped_ptr scoped_array
- boost学习之-scoped_array
- boost库之scoped_array
- boost学习之-scoped_ptr
- boost库之scoped_ptr
- C++学习 boost学习之-scoped_array
- c++智能指针:boost::scoped_ptr,boost::shared_ptr,boost::scoped_array
- 《我的泛型编程观》之boost.scoped_ptr、scoped_array源码分析
- Boost学习笔记----SmartPointer之Boost::scoped_ptr
- scoped_ptr,scoped_array
- Boost库高效内存管理——smart_ptr库——scoped_ptr/scoped_array
- C++学习 boost学习之-scoped_ptr
- boost 智能指针auto_ptr scoped_ptr shared_ptr scoped_array shared_array 总结
- C++学习之智能指针--auto_ptr、scoped_ptr、scoped_array、shared_ptr、shared_array、weak_ptr
- Boost源码学习---scoped_array.hpp
- boost之scoped_array的使用
- boost之scoped_array的使用
- boost学习scoped_ptr,shared_ptr
- C编译器剖析_3.1 语法分析_C语言的表达式(1)
- Cloudera Manager 使用笔记---远程访问不了Hue的管理页面
- HD-CNN: HIERARCHICAL DEEP CONVOLUTIONAL NEURAL NETWORK FOR IMAGE CLASSIFICATION(泛读)
- LeetCode174:Dungeon Game
- 分糖果
- boost库学习之 scoped_ptr scoped_array
- Java_IO流_字符流与字节流
- mysql中多个表 master salve同步搭建过程
- 如何使用为逻辑运算实现位向量(PROGRAMMING PEARLS)
- 力所能及之struts2环境搭建
- 图像基础知识
- softirq/tasklet/workqueue的区别
- 文字菜单动画畅想
- Python:文件操作技巧(File operation)