为了账号安全,请及时绑定邮箱和手机立即绑定

求助一下关于c++ vector clear() 方法的问题!

求助一下关于c++ vector clear() 方法的问题!

哈士奇WWW 2021-10-27 21:15:46
int main(int argc, char *argv[]){ int array[5]={1,3,2,5,4};vector<int> v(array,array+5); //sort(v);sort(v.begin(),v.end());v.clear() ; ?? 我这里都清空了啊 cout<<v[0];?? 这里为什么还能取出来值呢 system("PAUSE");return EXIT_SUCCESS;}
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

因为对于vector,clear并不真正释放内存(这是为优化效率所做的事),clear实际所做的是为vector中所保存的所有对象调用析构函数(如果有的话),然后初始化size

查看完整回答
反对 回复 2021-10-31
?
largeQ

TA贡献2039条经验 获得超7个赞

 vector,clear()并不真正释放内存(这是为优化效率所做的事),clear实际所做的是为vector中所保存的所有对象调用析构函数(如果有的话),然后初始化size这些东西,让觉得把所有的对象清除了。
  真正释放内存是在vector的析构函数里进行的,所以一旦超出vector的作用域(如函数返回),首先它所保存的所有对象会被析构,然后会调用allocator中的deallocate函数回收对象本身的内存。
  所以,某些编译器clear后还能访问到对象数据(因为它根本没清除),在一些比较新的C++编译器上(例如VS2008),当进行数组引用时(例如a[2]这种用法),STL库中会有一些check函数根据当前容器的size值来判断下标引用是否超出范围,如果超出,则会执行这样一句:
  _THROW(out_of_range, "invalid vector<T> subscript");
  即抛出一个越界异常,clear后没有捕获异常,程序在新编译器编译后就会崩溃掉。

查看完整回答
反对 回复 2021-10-31
  • 2 回答
  • 0 关注
  • 290 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信