第十八章 用於大型程序的工具
阿新 • • 發佈:2017-11-07
cto err cep nullptr ifstream [] 輸入流 答案 log
18.1
異常對象的類型:
(a):range_error
(b):range_error
throw p將拋出一個exception類型的異常
18.2
分配的動態內存將無法釋放
答案:發生異常,所在塊之前的臨時變量皆會被銷毀,V會調用vector類的析構函數進行銷毀,並釋放相關內存,P指針會被銷毀,但是P指針指向的內存由於是動態分配的,所以該內存不會被釋放,造成內存泄漏。輸入流對象會調用ifstream類的析構函數銷毀,最後程序被終止。
18.3
方一:使用智能指針,並傳入刪除的lambda表達式
shared_ptr<int> p(new int[v.size()], [](int *p) { delete[] p; });//lambda表達式相當於一個刪除器
方二:使用類:創建一個包含一個int*的類,在析構函數進行delete文件指針
class intAr { int *p=nullptr; public: intAr(size_t n): p(new int[n]){} ~intAr() { delete []p; } }
第十八章 用於大型程序的工具