2012-04-10 54 views
5

我對這個習語的理解是它很有用,因爲它確保資源在使用它們的對象超出範圍之後被釋放。RAII爲什麼如此命名?

換句話說,它更多的是去收購去初始化,所以爲什麼這個成語命名事情是這樣的?

回答

6

首先,我應該注意到它被廣泛認爲是一個名字不太好的成語。許多人更喜歡SBRM,它代表堆棧綁定資源管理。雖然我(勉強)只是因爲廣爲人知和使用而使用「RAII」,但我確實認爲SBRM能更好地描述真實的意圖。第二,當RAII是新的時候,它就像資源釋放一樣適用於收購。特別是,當時看到初始化發生在兩個步驟中是相當普遍的。你首先要定義一個對象,然後才動態分配與該對象相關的任何資源。很多風格指南提倡這一點,很大程度上是因爲在那個時候(在C++有異常處理之前)沒有好的方法來處理構造函數中的失敗。因此,風格指南經常說,構造者應該只做最低限度的工作,並且特別避免任何可能出現故障的東西 - 特別是分配資源(並且有些人仍然會這樣說)。

其中很多已經處理過的雖然釋放了這個資源,但是這並不像以前的做法那麼明顯。