c 11 智慧型指標 之 shared ptr

2021-09-03 01:58:07 字數 1074 閱讀 5891

使用:

// new array 

_prta(unsigned char, filebuffer, filesize + 1);

// new point

_prt(structa) mstructa;

mstructa = make_shared(111);

shared_ptr不用手動去釋放資源,它會智慧型地在合適的時候去自動釋放,這個對於c++記憶體洩漏和程式設計效率會有很大的提高;

以前我們常為忘記 delete,並且在多執行緒釋放記憶體時很糾結 ,shared_ptr 可以方便的解決問題,因為它是引用計數和執行緒安全的。

寫個簡單的demo:

#include #include using namespace std;

#define _prt(t) std::shared_ptr//定義 shared_ptr的智慧型指標

#define _prto(t,n,...) std::shared_ptrn(new t(##__va_args__))

//定義 shared_ptr的陣列智慧型指標

#define _prta(t,n,n) std::shared_ptrn(new t[n])

class shareptr

shareptr(string name) :name(name)

; ~shareptr()

; void printf() };

shared_ptreasyptr(string name)

void easyptrarray()

; strncpy(p.get(), cstr,strlen(cstr));

}void nativeptrarray()

; strncpy(p , cstr, strlen(cstr));

}int main()

輸出:

主要太爽的是不用再想著去釋放記憶體。

C 11之智慧型指標

c 98提供了了智慧型指標auto ptr,但c 11已將其摒棄,並提供了unique ptr和shared ptr。這三種智慧型指標模板都定義了類似指標的物件,可以將new獲得的位址賦給這種物件。當智慧型指標過期時,這些記憶體將自動被釋放。其基本用法如下 include include inclu...

c 11之智慧型指標

由於在c 中我們可以動態分配記憶體,但有時候我們會忘記用 delete或free釋放記憶體,就會導致記憶體洩露。所以c 11提供了智慧型指標這種東西 本文參考了知乎某知乎友的 比如下面這兩種情況 1 記憶體洩漏 str1所指的資源沒有被釋放 2 多重釋放,引起程式崩潰 可能平時都寫在乙個檔案不會忘記...

C 11智慧型指標

本文介紹c 的四種智慧型指標,其中後三種是c 11新增加的,auto ptr已被棄用。要編譯c 11,需要安裝g 4.8 sudo add apt repository ppa ubuntu toolchain r test sudo apt get update sudo apt get inst...