容器vector的resize操作 & 智能指针shared_ptr的reset操作
来源:互联网 发布:ai人工智能 编辑:程序博客网 时间:2024/06/07 02:40
智能指针shared_ptr常使用的一种场景是:智能指针数组,即将多个指针放在同一个容器(比如vector)里。下面代码是将指向队列的智能指针放在容器vector中:
typedef std::deque<double> AglSeq; typedef boost::shared_ptr<AglSeq> AxisSeqPtr; typedef std::vector<AxisSeqPtr> N_AxisSeqPtr;typedef N_AxisSeqPtr::size_type N_AxisSeqPtrIdx;
机器人每个轴的运动角度用一个智能指针来管理,每个智能指针指向一个队列,用来盛放机器人运动轨迹算法计算出的位置角度;机器人有多个轴,所以用一个容器vector来容纳管理轴的所有指针,从而组成了一个指针数组类型N_AxisSeqPtr。
N_AxisSeqPtr nAglSeqPtr;//初始化nAglSeqPtr.resize(m); for (N_AxisSeqPtrIdx idx=0; idx!=m; ++idx){ nAglSeqPtr[idx].reset(new AglSeq()); }//使用for(unsigned i=0; i<pointNum; ++i){ for (N_AxisSeqPtrIdx idx=0; idx!=m; ++idx) { nAglSeqPtr[idx]->push_back(rad2deg(posACS(i))); nAglSeqPtr[idx]->pop_front(); X = nAglSeqPtr[idx]->at(pointNum); X = nAglSeqPtr[idx]->back(); X = nAglSeqPtr[idx]->front(); nAglSeqPtr[idx]->clear(); nAglSeqPtr[idx]->insert(iterator_p, args); nAglSeqPtr[idx]->erase(iterator_p); }}......//重置改变nAglSeqPtr.resize(n); //不同类型机器人有不同轴数,故需要重置数组大小for (N_AxisSeqPtrIdx idx=0; idx!=n; ++idx){ nAglSeqPtr[idx].reset(new AglSeq()); //重置智能指针的所指对象}
提出的问题
1. 指针数组resize操作之后,之前的指针所指向的对象还在吗? 还可以继续使用吗?
:参考博客http://blog.csdn.net/cjfeii/article/details/9247569
vector的成员函数resize分析
resize会调用构造函数来构造一个容器存放类型的临时变量,这里指的是智能指针shared_ptr类临时对象,不妨设为tmpA。
如果__new_size > size(),就进行insert操作;
如果__new_size < size(),就进行erase操作,直接调用相应的析构函数
最后,调用tmpA的析构函数。
2. 智能指针的reset操作是怎样的?
p.reset(new AglSeq())
指针与指向原来对象对应的引用计数减1,若引用计数减为0则释放该对象内存;
指针与指向新对象对应的引用计数加1;p.reset()
指针与指向原来对象对应的引用计数减1,若引用计数减为0则释放该对象内存;
if ( !p.unique() ) //改变前判断是否对象的唯一使用者,若不是则拷贝一份用来修改{ p.reset( new string( *p ) );}*p += newValue;
if ( p.use_count() == 0 ){...} //一般用于调试,是比较耗时的操作time-consuming!!
阅读全文
0 0
- 容器vector的resize操作 & 智能指针shared_ptr的reset操作
- 容器操作resize()的误用
- boost库的智能指针shared_ptr结合容器vector的使用
- 智能指针 shared_ptr 的使用方法
- 智能指针shared_ptr的实现
- 智能指针shared_ptr的用法
- 智能指针shared_ptr的用法
- 对vector容器的操作
- C++ 顺序容器的操作(4) 容器大小的操作size、max_size、empty、resize
- C++ STL 的vector容器的操作
- shared_ptr,带引用计数的智能指针
- 智能指针 shared_ptr 的用法误区.
- 智能指针shared_ptr组件的使用
- 有关智能指针(shared_ptr)的讨论
- c++智能指针的使用,auto_ptr,shared_ptr
- shared_ptr智能指针的简单实现
- 智能指针shared_ptr 的简单实现
- 智能指针shared_ptr的一些综合
- 用SQL分析世界杯数据
- Android Api demo系列(3) (App>Activity>CustomTitle)
- Spring Boot : logback和log4j2配置(五)
- EasyUI--combobox
- 使用netty开发简单样例
- 容器vector的resize操作 & 智能指针shared_ptr的reset操作
- SSL与TLS的区别以及介绍
- BOM_DOM
- 错排
- C#系列之String和StringBuilder
- 23种设计模式
- [BZOJ2819]Nim-树状数组-dfs序
- 类继承,公有继承,多态公有继承
- 解决z-index值堆叠无效问题