使用:
// 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...