int *pi = new int; //pi指向乙個動態分配的,未初始化的無名物件
string *ps = new string; //初始化為空string
int *pi = new int(1024); //初始值為1024
string *ps = new string(10, '9'); //初始值為10個9
vector*pv = new vector;
string *ps1 = new string; //預設初始化為空
string *ps = new string(); //值初始化為空string
int *ps1 = new int; // 預設初始化;*ps1的值未定義
int *ps2 = new int(); //初始化為0;*ps2為0
說明:對於string來說,存在自己定義的建構函式,不管是用值初始化還是預設初始化都會呼叫定義的預設建構函式來初始化。但是對於內建型別的int來說,用預設初始化和值初始化對應的建構函式不同,所以效果也不一樣。
//如果分配失敗,new返回乙個空指標
int *p1 = new int; //如果分配失敗,new丟擲std::bad_alloc
int *p2 = new (nothrow) int; //如果分配失敗,new返回乙個空指標。
//分配並初始化乙個const int
const int *pci = new const int(1024);
//分配並預設初始化乙個const的空string
const string *pcs = new const string;
int i, *pi1 = &i, *pi2 = nullptr;
double *pd = new double(33), *pd2 = pd;
delete i; //錯誤,i不是乙個指標。
delete pi1; //行為未定義 pi1是乙個指向區域性變數的指標。
delete pi2;//正確釋放乙個空指標。
delete pd; //正確
delete pd2; //未定義 釋放乙個已經釋放過的記憶體
const int *pci = new const int(1024);
delete pci; // 正確:釋放乙個const物件。
懸空指標:野指標 當動態分配記憶體被釋放後 指標的行為是未定義的 ,有的機器繼續讓其指向了原有的記憶體但是此時的記憶體現在已經無效 可以將被釋放後的指標指向空指標,或者在指標離開作用域之前將其釋放 c 之智慧型指標(二)之直接管理記憶體
c 定義了兩個運算子來分配和釋放動態記憶體。new分配記憶體,delete釋放new分配的記憶體。相對於智慧型指標,使用這個兩個運算子非常容易出錯。因為它不能依賴類物件拷貝 賦值和銷毀操作的任何預設定義。預設情況下,動態分配的物件是預設初始化的。這意味著內建型別或組合型別的值將是未定義的。而類型別的...
12 1 2 記憶體監控
linux 系統的記憶體分為物理記憶體和虛擬記憶體兩種。物理記憶體是真實的,也就是物理記憶體條上的記憶體。而虛擬記憶體則是採用硬碟空間補充物理記憶體,將暫時不使用的記憶體頁寫到硬碟上以騰出更多的物理記憶體讓有需要的程序使用。當這些已被騰出的記憶體頁需要再次使用時才從硬碟 虛擬記憶體 中讀回記憶體。這...
工具 Mac電腦如何直接管理安卓手機記憶體檔案
之前用windows時,管理android手機記憶體卡,拷貝個應用啥的比較簡單。轉戰mac之後,找了半天沒找到如何管理手機記憶體檔案。現在終於給找到好東西了,在mac上直接就能開啟手機記憶體卡。比用windows還簡單。android file transfer 官網 使用 1 用usb連線手機到m...