中易网

怎么释放vector容器中的指针

答案:1  悬赏:10  
解决时间 2021-02-23 03:09
怎么释放vector容器中的指针
最佳答案
调用clear清楚容器中的指针的时候,系统会自动释放指针所指的对象,用不着程序员操作。就你的具体问题摘了段STL源码。注释过了,应该能看懂。

  void clear() { erase(begin(), end()); } iterator erase(iterator first, iterator last) { iterator i = copy(last, finish, first); destroy(i, finish);// 全局函数,销毁元素的基本函数。 finish = finish - (last - first); return first; }// 以下是 destroy() 第二版本,接受两个迭代器。// 这里用到了traits技术,判断型别,以便用不同的方式析构对象,不了解traits略过就可以template <class ForwardIterator>inline void destroy(ForwardIterator first, ForwardIterator last) { __destroy(first, last, value_type(first));}// 判断元素的数值型别(value type)是否有 trivial destructortemplate <class ForwardIterator, class T>inline void __destroy(ForwardIterator first, ForwardIterator last, T*) { typedef typename __type_traits<T>::has_trivial_destructor trivial_destructor; __destroy_aux(first, last, trivial_destructor());}// 如果元素的数值型别(value type)有 non-trivial destructor…对应与类,此时无法直接大块释放内存// 当为内置数值如int等,可以直接大片释放内存来提高效率template <class ForwardIterator>inline void__destroy_aux(ForwardIterator first, ForwardIterator last, __false_type) { for ( ; first < last; ++first) destroy(&*first); //这里是一个指针,也就是你容器中的元素}// 以下是 destroy() 一个版本,接受一个指针。template <class T>inline void destroy(T* pointer) { pointer->~T();// 使用析构函数,}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
关于晋江签约问题
笔记本电脑插上网线后发出叽叽的声音
在手机上看书费流量吗?
平凉市崆峒区司法局大寨司法所地址有知道的么
充电桩给纯电动充电 ah和kwh的换算 如何算时
怎样删除word文档的几个页码
倒车入库的技巧
倍科贸易(上海)有限公司深圳分公司工资怎么
怡佳仁在什么地方啊,我要过去处理事情
和国企签了合同的员工,有不接受培训的权利吗
潍坊高里汽车站地址在哪,我要去那里办事
作文:_我想对你说人物唐玄宗
本人想自学初三化学,但各类化学名称的作用都
常时间打嗝能不能抽烟和喝茶
腾达综合门市部怎么去啊,有知道地址的么
推荐资讯
铜钱草不见阳光会出现什么后果?
hibernate映射类中的Set集合对应到Vo类是什么
在南阳收入多少算白领?
2011年十月高等教育自学考试,学前教育诊断咨
秦皇跑酷训练馆这个地址在什么地方,我要处理
下面说法正确的是:A.行星绕太阳的椭圆轨道可
阿兰图灵是英国数学家,逻辑家被人誉为什么
古代皇帝纳了新妃 久不上朝了什么意思?
关于破解版PS3 3.55自制版玩GTA5的问题
手舞足蹈和指手画脚的意思的区分在哪
布鲁美丽水库面膜补水效果好吗?好用吗?
大房东要收房,二房东发难
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?