C++編程規範之13:確保資源為對象所擁有。使用顯示的RAII和智能指針
摘要:
利器在手,不要再徒手為之:C++的“資源獲取及初始化”(ResourceAcquisition Is Initialization,RAII)慣用法是正確處理資源的利器。RAII使編譯器能夠提供強大且自動的保證,這在其他語言中可是需要脆弱的手工編寫的慣用法才能實現的。分配原始資源的時候,應該立即將其傳遞給屬主對象。永遠不要在一條語句中分配一個以上的資源。
這就要求我們的對象、變量在他的生命周期結束的時候要進行回收,否則會造成內存泄漏。C++語言強製施行的構造函數和析構函數對稱反映了資源獲取和釋放的本質的對稱性。這使具有資源獲取的構造函數和具有資源釋放的析構函數的基於棧的對象成為了自動化資源管理和清除的極佳工具。
要確保所有的資源都是為對象所有。最好用智能指針而不是原始指針來保存動態分配的資源,同樣,應該在自己的語句中執行顯示的資源分配,而且每次都應該馬上將分配的資源賦予管理對象,否則,就可能泄漏資源,因為函數參數的計算順序是未定義的。對於這個問題的解決方法是:遵循建議,絕對不要在一條語句中分配一個以上的資源,應該在自己的代碼語句中執行顯示的資源分配,而且每次都應該馬上將分配的資源賦予管理對象。
最後更新:2017-04-03 12:53:43
上一篇:
Android項目Library導入的問題整理
下一篇:
C++編程規範之18:盡可能局部地聲明變量
Eclipse SVN (Subclipse的更新日誌)、版本集合(1.10.0起)、更新、安裝方法!
iphone7鎖機了怎麼辦,蘋果7s被鎖了怎麼辦
數字化轉型的安全風險控製
手淘推出“店鋪二樓”
人工智能在醫療方麵的應用三大方向
連載:麵向對象葵花寶典:思想、技巧與實踐(22) - 領域模型
Android中自定義Activity和Dialog的位置大小背景和透明度等
C# 使用LINQ、泛型、Index函數優化switch(或者多條if)語句
Root Cause Analysis and Countermeasures of Common Issues of Enterprise Websites
Java中取某一個範圍的隨機數