今天學習了C++中的RAII機制,主要是應對記憶體泄露的情況,通過將記憶體的動態申請放置在建構式中,將動態記憶體的釋放放置在解構式中實作,
(1)malloc出來的空間,沒有進行釋放,存在記憶體泄漏;
(2)如果在malloc和free之間拋例外,那么同樣存在記憶體泄漏問題,該問題稱為例外安全問題,
這樣,就將記憶體管理的職責下放給了物件,可以利用函式呼叫堆疊完成動態記憶體的管理,示例代碼如下:
#include <iostream>
using namespace std;
template<class T>
class Raii {
public:
Raii(T * ptr_ = nullptr):ptr(ptr_) {
}
~Raii(){
if (nullptr != ptr) {
cout << "delete ptr" << endl;
delete ptr;
}
}
T & operator*() {
return *ptr;
}
T * operator->() {
return ptr;
}
private:
T * ptr;
};
#include "RAII.h" int main() { int * ptr = new int(); Raii<int> raii(ptr); return 0; }

可以看到,離開作用域后,ptr被Raii類的解構式釋放動態記憶體,
參考資料:
https://blog.csdn.net/Willing_hope/article/details/108233756
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/287292.html
標籤:其他
上一篇:多型性
下一篇:Mybatis學習隨筆(一)
