RAII (Resource Acquisition Is Initialization), 是一種資源管理技術。簡單來說,RAII 就是把資源的得到和對象的初始化聯繫在一塊兒,這使得資源分配成爲局部對象聲明週期的一部分,從而使得資源的分配具備原子性。函數
好比說,封裝一個指針,在Constructor中得到資源,在Destructor中釋放資源。那麼,當程序某處發生異常,大體棧反解(stack unwinding)時,已經分配的資源就伴隨着局部對象的消亡(系統調用析構函數)而被恰當的清理掉。ui
一個典型的RAII封裝就是auto_ptr。如下,對auto_ptr 進行一個歸納和分析。詳細的講解,能夠參考「Using auto_ptr Effectively" 這篇文章。http://www.gotw.ca/publications/using_auto_ptr_effectively.htm設計
auto_ptr最重要的特性: For auto_ptr, copies are not equivalent.指針
這種突破常規的思惟方式和設計方案,使得auto_ptr具備本身特定的優點。auto_ptr特別適合處理一下模型。htm
Source() -----------------------> Sink() 對象
Source()產生資源而且撒手無論了, Sink()接管資源全部權而且進行處理和釋放。資源
除此以外,有三點須要注意。it
1. 不要將auto_ptr放在容器中處理。 (固然,如今auto_ptr的模板已經設計的儘可能阻止用戶這麼幹了)。io
2. 能夠聲明一個const auto_ptr,那麼它的資源全部權不會被轉讓,這意味着它不能被拷貝或者賦值。模板
3. 相似於auto_ptr的智能指針,有時候對於編寫exception-safe的代碼相當重要。