C++ auto_ptr & RAII筆記
學生時代筆記,可能有誤?
Resource Acquisition Is Initialization
C++中利用物件離開scope即會自動呼叫destructor的特性(stack),使資源類型物件在使用完或有exception跳出時能自動將資源釋放
Java中常見的try catch block中finally{close資源}的寫法在C++中就不需要了
若是必須使用pointer而非物件時,可以在資源物件中宣告該pointer,實際使用還是用資源物件即可
C++ auto_ptr
利用RAII包出來的pointer,實際上仍是個物件,利用operator overloading實作pointer的oprator,藉以模擬pointer行為
由於仍然是個物件,並會在destructor時執行delete ptr,所以能做到不需手動呼叫delete的功能
需注意的是因destructor呼叫的一律是delete ptr,所以陣列無法使用auto_ptr(需要delete []*)