1. 程式人生 > >第十八章 用於大型程序的工具

第十八章 用於大型程序的工具

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;    
    }    
}    

  

第十八章 用於大型程序的工具