關(guān)于函數(shù)體 try 的幾個要點:
- 構(gòu)造函數(shù) try 只能用來傳遞從基類或成員子對象的構(gòu)造函數(shù)拋出的對象(或者做一些響應這些錯誤的其它操作),不能用作其它用途(比如釋放資源)。
- 析構(gòu)函數(shù) try 沒有什么實際用途,因為析構(gòu)函數(shù)不應該拋出異常。
- 所有其它的函數(shù) try 沒有什么實際用途。一個一般的函數(shù) try 不能抓取到函數(shù)體內(nèi)的 try 所不能抓取到的異常。
- 記住在構(gòu)造函數(shù)體內(nèi)而不是在初始化列表中分配未被管理的資源(比如使用 new)。即,要么使用“獲取資源就是初始化”,從而避免未被管理的資源,要么在構(gòu)造函數(shù)體內(nèi)獲取資源。
- 總是在構(gòu)造函數(shù)或析構(gòu)函數(shù)體內(nèi)釋放未被管理的資源,而不是在它們的函數(shù) try 里面。
- 如果一個構(gòu)造函數(shù)有異常規(guī)格,那么它的異常規(guī)格必須包含該類的基類和成員子對象的所有可能拋出的異常。
- 使用 Pimpl 思想來保持類內(nèi)部的“可選的部分”。如果一個成員對象的構(gòu)造函數(shù)可能拋出異常而你不一定需要那個對象,就可以在類中僅僅保持一個指向該對象的指針。通過該指針是否為空來判斷是否持有改對象。
- 最后重復一下:使用“資源分配就是初始化”而不是手動管理資源。
文章來源:
http://my.donews.com/robinchow/2007/01/29/cagxxmzwktgtrdirlmuspfjuarcxkcumdbjb/