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 ...