1. 程式人生 > 其它 >[筆記] C++ RAII(資源獲取即初始化)

[筆記] C++ RAII(資源獲取即初始化)

何為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)許可協議 下提供

轉載的內容均已註明原連結,請參照原作者要求使用。