C 11記錄筆記

2021-10-24 14:38:16 字數 1434 閱讀 4515

void test1(void)

內cout << "hello" << endl;

}int tab[4] ;

int tab1[4] {};//預設為0

《1》vector:儲存方案是使用new 和delete進行的管理,也就是說資料是在堆區和自由儲存區,使用起來效率相對低 

《2》array:申請時就確定大小,效率高,和陣列相同

typedef struct myda ;

void test1(void)

}2>

和c使用一樣,唯一區別是申請和釋放陣列

int *p  = new int [500];

delete  p;//方括號是告訴程式是釋放整個陣列,不是指向的元素;

int * p1 = new int;

delete p1;

總結:可以簡單記住是申請是帶有,則釋放時帶有,申請時沒有,則釋放時沒有

c++程式的記憶體格局通常分為四個區:全域性資料區(data area),**區(code area),棧區(stack area),堆區(heap area)(即自由儲存區)

全域性資料區存放全域性變數,靜態資料和常量;

所有類成員函式和非成員函式**存放在**區

為執行函式而分配的區域性變數、函式引數、返回資料、返回位址等存放在棧區

餘下的空間都被稱為堆區。

個人理解:每個方法會根據類的命名空間,所屬類,以及引數型別,返回值型別來確定這個函式的唯一性,編譯階段會由編譯器更改方法名字,然後在編譯器中生成乙個對應的全域性函式,這個生成方法是可逆的,也就是說在呼叫方法時可找到這個對應的全域性函式,知道全域性函式就可以找到這個類方法。而且在這個全域性函式中會自動增加乙個物件傳參指標this,這個物件中只包含類的成員和虛函式表,這也就是為什麼在方法中可以呼叫this指標

#include

#include

#include

using namespace std;

class a

};class b :public a

};int main(void)

列印結果:b::foo() is called

參考理解:對於使用new生成的物件,把釋放許可權交給智慧型指標,而智慧型指標是通過作用域和引用計數來管理釋放時機

1>unique_ptr ,物件被管理後,不能再被其他智慧型指標管理,在超出指標的作用域後,自動釋放

2>shared_ptr,可以多個智慧型指標管理同乙個物件,每個指標作用域失效後,引用就減1,直到為0,被管理物件被釋放

2.1>weak_ptr,用於輔助shared_ptr,因為shared_ptr可能會出現互相引用的死鎖情況,而weak_ptr簡單可以理解為和shared_ptr用相同功能,但是在被管理時,引用沒有增加,釋放沒有減少,也就會出現和shared_ptr引用相差1,就不會出現死鎖情況了

c 11學習筆記

c 98的 std auto ptr已經被徹底遺棄了,取而代之的是unique ptr shared ptr與weak ptr。大部分時候我們自己手動申請記憶體方式記憶體都是沒有問題的,問題是如果程式很大了之後,乙個複雜的物件,多次拷貝的代價非常高,很多地方都會使用到,只存在乙份拷貝顯然是最好的,這...

c 11 筆記,c 筆記

find if的使用 bool isthe const string s1 vectora auto aaa find if a.begin a.end isthe aaa為第乙個符合要求的位址。aaa為取到的值。aaa為迭代器 lambda 表示式 auto f cout auto aaa fin...

C 11學習筆記 Type Support

其實主要還是對c 的std庫的學習吧,雖然用的不少但是對c 的全貌還不太了解。主要包括3個部分 基本型別 rtti 萃取技術 traits size t 用的太多了,不說了。ptrdiff t 乙個有符號的型別,通常用來表示兩個指標相減的結果,是乙個機器相關的型別。和size t不同的是,size ...