[筆記] C++ RAII(資源獲取即初始化)
阿新 • • 發佈:2022-01-17
何為RAII
RAII(Resource Acquisition Is Initialization)是由Bjarne Stroustrup提出的一種使用區域性物件來管理資源(記憶體,檔案,網路)的方式
資源回收
資源回收一直是一個令人頭疼的問題,人們總是在new Class()
後忘了在正確的地方delete
它,僅僅是因為這種小問題,人們也做不好。在工程中,為了解決"人這種生物的能力是有極限的"這種問題,提出了幾種回收資源的方式:
- 手動管理
- 垃圾回收(Garbage Collection, GC)
- RAII/所有權模式
垃圾回收多用在動態語言中,它雖然解決了回收問題,但帶來了不少的效能損失。
而作為零損耗抽象的C++,其創始人提出了RAII模式,利用系統堆疊在結束時(可形象的理解為一對大括號結束}
示例
在建構函式中獲得資源,在解構函式中釋放資源,利用C++語言區域性物件自動銷燬的特性來自動釋放
#include <iostream> #include <format> using namespace std; class RAII { public: char* ptr; RAII() { ptr = (char*) malloc(sizeof(*ptr) * 64); cout << format("malloc {:#x}", (uint64_t) ptr) << endl; } ~RAII() { free(ptr); cout << format("free {:#x}", (uint64_t) ptr) << endl; } }; int main() { auto raii = RAII(); return 0; }
Copyright 2021 Winterreisender.
文字內容除另有宣告外,均為原創,且在 知識共享 署名-非商業性使用-禁止演繹 4.0 國際 (CC BY-NC-ND 4.0)許可協議 下提供
轉載的內容均已註明原連結,請參照原作者要求使用。