亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求助一下關于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條經驗 獲得超8個贊

 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 關注
  • 407 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號