關於在建構函式出現的異常

2021-06-15 21:24:30 字數 698 閱讀 5558

1:乙個類在new過程中出現異常時,其所佔記憶體會被delete掉(會呼叫operator delete函式)(這是編譯器的責任,我自己沒有幹好的事,我就消毀,不給別人新增麻煩.).但其析構函式不會被呼叫.

2:乙個類在new過程中沒有出現問題,那麼,delete的任務就交給程式設計師了.

3:new char,int等方式取得的記憶體,也是,如果失敗返回null,資源被編譯器釋放,成功,則釋放的任務交給程式設計師了.所以說,一般都要檢查new的返回值是否為空.

所以假定在obj的建構函式與析構函式如下

obj()

~obj()

如果在new c()時,發生異常,此時,new a,new b()已經正確的被new好了.編譯器會自己釋放 new c()的記憶體.

而new a(),new b()的記憶體原本是在 ~obj()被釋放的,現在obj()出現了異常,~obj()就會發生記憶體洩漏了.

乙個比較好的解決方法是:

obj()

catch(...)

}這樣,無論哪個物件出現問題,都能保證已經new好的物件能被正解的釋放掉.(ps: 這也正是more effective c++ item 10 的解釋之道.)

其思想是,如果出現了異常,我們的任務就是把那些new成功的記憶體如何釋放掉!!!

一般情況下就是,就把本層次內,也就是說本函式體內,所有new的記憶體,及本類內所有已經new好的物件的記憶體釋放掉.

inline函式出現無法解析的錯誤

還是我朋友的那個專案,編譯完告訴我他寫的乙個函式編譯的時候出現了無法解析的錯誤。哦,無法解析就是 unresloved 那個錯誤嗎,就是找不到函式的實現咯。告訴朋友在 上把函式的實現show了一下,發現是個inline函式,就告訴朋友把inline去了試試,嘿嘿,果然行了。別忙,為啥子inline就...

sql中replace函式出現的錯誤

由於伺服器變更,要將文字欄位中的伺服器位址進行替換 字段型別 text 測試過程 update image server set image text replace image text,url1,url2 錯誤資訊 函式 replace 的引數 1 的資料型別 text 無效。我懷疑是text型...

RFs類的GetDir函式出現的問題

程式的 其實很簡單,編寫乙個簡單的活動物件程式,採用rfs的notifychange 函式監控c system install logs下的檔案寫事件,在程式得到檔案伺服器的檔案寫事件通知之後,使用getdir 獲取這個目錄下的所有檔案資訊。就是這樣乙個函式導致系統重起。另外自己也模擬重現這個問題了...