从提取的vector代码,Part1可看出,push_back的操作行为. 兵分两路,可是再向下看,你会发现,无一例外,都 通过const _Tp& 进行拷贝行为,那么从auto_ptr提出的片段就 派上用场了. 可你知道的,auto_ptr总是坚持对对象的独权.那必须修改 原来维护的对象,而vector行为要求const _Tp&,这样自然会产生 问题.一般编译器...
智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。 每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个...
1,unique_ptr的数组智能指针,没有*和->操作,但支持下标操作[] 2,shared_ptr的数组智能指针,有*和->操作,但不支持下标操作[],只能通过get()去访问数组的元素。 3,shared_ptr的数组智能指针,必须要自定义deleter 小例子 #include<iostream>#include<memory>#include<vector>using namespacestd;classtest{public:...
Aliasing constructor,简单说就是构造出来的 shared_ptr 对象和参数 r 指向同一个控制块(会影响 r 指向的资源的生命周期),但是指向共享资源的指针是参数 ptr。看下面这个例子。 usingVec =std::vector<int>;std::shared_ptr<int> GetSPtr() {autoelts = {0,1,2,3,4};std::shared_ptr<Vec> pvec =std...
就是一个动态数组,里面有一个指针指向一片连续的内存空间。 特点:内存空间只会增长不会减少 vector有两个函数,一个是capacity(),返回对象缓冲区(vector维护的内存空间)实际申请的空间大小,另一个size(),返回当前对象缓冲区存储数据的个数。对于vector来说,capacity是永远大于等于size的,档capacity和size相等时,vector...
CHeapPtr和变体的工作方式与CAutoPtr相同,使用不同的堆函数(而不是 C++new和delete运算符)分配和释放内存除外。CAutoVectorPtr与CAutoPtr类似,唯一不同的是它使用向量 new[]和向量 delete[]分配和释放内存。 有关何时需要智能指针的数组或列表,另请参阅CAutoPtrArray以及CAutoPtrList。
比如在C++中,大部分情况下对于数组的使用可以替换为vector。 int nums[10]; vector<int> vec(10); vec[1]; vec.at(1);//使用此种方式可以避免越界访问,越界直接报错 //使用C++的异常处理方法 try{ cout << vec.at(100); } catch(exception &e){ cout << "standard exception :" << e.what() ...
CAutoVectorPtr::m_p 指针数据成员变量。备注此类提供用于创建和管理智能指针的方法,通过自动释放超出范围的资源来帮助防止内存泄漏。 CAutoVectorPtr 类似于 CAutoPtr,唯一的区别是 CAutoVectorPtr 使用vector new[] 和vector delete[] 分配和释放内存,而不是 C++ new 和delete 运算符。 如果需要 CAutoVectorPtr...
内容涉及:STL的string类型,STL基本概念(容器、迭代器、算法),容器的分类,序列式容器vector、deque,...
智能指针和vector 俩个分别什么时候用好? 只看楼主 收藏 回复 鸡蛋灌饼 超能力者 9 君不修 马猴烧酒 14 在需要对一些资源进行传递和管理的时候使用,unique_ptr可以随便用,shared_ptr因为其传染性看情况使用vector在用到动态数组的时候用,其实是想用就用...