c primer筆記 動態記憶體

2021-08-22 05:00:11 字數 1733 閱讀 5553

//  

shared_ptr

p1; //儲存著乙個空指標

// make_shared(args)

shared_ptr

p3 = make_shared(42);

shared_ptr

p4 = make_shared(10, 'd');

//引用計數:拷貝,初始化,函式引數,函式返回值,計數+1 。銷毀計數-1

auto r = make_shared(42);

r = q; //q物件的引用計數+1,r指向物件的引用計數-1。所以,42被釋放

int *pi = new

int; //pi指向乙個動態分配、未初始化的無名物件。預設初始化

int *pi = new

int(1024); //值初始化

string *pi = new

string; //預設初始化為空字串

vector

*pv = new

vector

; //值初始化

int *pi = new

int(); //值初始化0

string *pi = new

string(); //值初始化為空字串

delete p;
shared_ptr

p1 = new

int(42); //error : explict

shared_ptr

p2(new

int(42));

shared_ptr p1(new

int(42));

int *q = p.get(); //使用q時注意,不要讓它管理的指標被釋放

p = new

int(1024);

p.reset(new

int(1024));

if(!p.unique())

p.reset(new

string(*p));

*p += newval;

void end_connection(connection *p) 

connection c = connect(&d);

shared_ptrp(&c, end_connection); //當p被銷毀時,呼叫end_connection

unique_ptrp1;

unique_ptrp12(3);

p2(p1.release()); //p1 = null ,p2控制p1的記憶體物件

p2.reset(p1.release()); //p1 = null, p2釋放物件,並控制p1的物件

//不能拷貝的unique_ptr可以作為函式返回,進行拷貝

unique_ptrdecltype(end_connection)*>

p(&c, end_connection);

auto = = make_shared(42);

weak_ptr wp(p);

//由於物件可能不存在,不能使用wp直接訪問物件,必須呼叫lock。如果存在,則返回指向共享物件的指標

if(shared_ptr

np = wp.lock())

c primer 動態記憶體

在這裡提到的內容裡,均包含在標頭檔案 include裡面,主要涉及c 的記憶體管理問題,在做專案的時候,可能會遇到,僅僅只是個人筆記,如有錯誤,還請大神賜教。1.智慧型指標 指的是在程式呼叫完最後乙個智慧型指標指的物件,自動釋放記憶體單元。包含shared ptr,unique ptr,weak p...

c primer 學習筆記11 動態記憶體

書本411頁。練習12.6 編寫函式,返回乙個動態分配的int的vector。將此vector傳遞給另乙個函式,這個函式讀取標準輸入,將輸入的值儲存在vector元素中,再將vector傳遞給另乙個函式,列印輸入的值。記得在恰當的時候delete vector。include include usi...

c primer 動態記憶體學習小記

在做練習題12.7時,遇到乙個問題,如果這麼定義乙個shared ptr是有問題得,不能往裡面push back元素,如下 所示 auto create auto input shared ptr d return d 如果這樣建立了p之後 傳入到input函式中使用push back 就會出錯。正...