條款 13:以對象管理資源

條款 13:以對象管理資源

Use objects to manage resources.

依賴人爲的 delete 掉 new 出來的資源,基本是行不通的,忘記、過早 return、代碼修改等都會引起資源沒有被正確釋放導致內存泄露
以對象管理資源的兩個關鍵想法:

  • 獲得資源後立即放入對象,這個觀念又被稱爲:資源取得時機便是初始化時機,即 RAII(Resource Acquisition Is Initialization)
  • 管理對象運用析構函數確保資源被釋放
void f()
{
    std::auto_ptr<Investment> pInv(CreateInvestment());
    ...
}
  • 可以使用 auto_ptr 來管理資源,該對象析構時釋放資源。需要注意 auto_ptr 被複制時,原指針將變成 NULL,保證同時只有一個指針指向資源。若需要支持正常複製,則需要使用 shared_ptr
  • 需要注意 delete 和 delete[],對應 new 和 new[]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章