閱讀411 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C++編程規範之13:確保資源為對象所擁有。使用顯示的RAII和智能指針

摘要:

    利器在手,不要再徒手為之:C++的“資源獲取及初始化”(ResourceAcquisition Is Initialization,RAII)慣用法是正確處理資源的利器。RAII使編譯器能夠提供強大且自動的保證,這在其他語言中可是需要脆弱的手工編寫的慣用法才能實現的。分配原始資源的時候,應該立即將其傳遞給屬主對象。永遠不要在一條語句中分配一個以上的資源。

    這就要求我們的對象、變量在他的生命周期結束的時候要進行回收,否則會造成內存泄漏。C++語言強製施行的構造函數和析構函數對稱反映了資源獲取和釋放的本質的對稱性。這使具有資源獲取的構造函數和具有資源釋放的析構函數的基於棧的對象成為了自動化資源管理和清除的極佳工具。

    要確保所有的資源都是為對象所有。最好用智能指針而不是原始指針來保存動態分配的資源,同樣,應該在自己的語句中執行顯示的資源分配,而且每次都應該馬上將分配的資源賦予管理對象,否則,就可能泄漏資源,因為函數參數的計算順序是未定義的。對於這個問題的解決方法是:遵循建議,絕對不要在一條語句中分配一個以上的資源,應該在自己的代碼語句中執行顯示的資源分配,而且每次都應該馬上將分配的資源賦予管理對象。

最後更新:2017-04-03 12:53:43

  上一篇:go Android項目Library導入的問題整理
  下一篇:go C++編程規範之18:盡可能局部地聲明變量