動態記憶體
c語言:malloc realloc calloc free
c++語言:new delete
1.c語言的動態分配是通過函式,c++是通過運算子
2.c語言的動態分配不能和c++混用
new和delete的用法
new兩種用法:1.分配單個記憶體;2.分配連續記憶體
分配單個記憶體也有兩種情況:1.分配單個記憶體並不初始化 2.分配單個記憶體並且初始化
delete的兩種用法:1.釋放單個記憶體 2.釋放連續記憶體
如果單個記憶體,delete就釋放單個記憶體,只有new連續記憶體,才釋放連續記憶體
使用動態記憶體時需要注意:
1.記憶體沒有分配就使用:
int *p;*p=10;
解決辦法:習慣變數初始化:不僅僅是變數,指標變數習慣初始化null;在使用指標之前習慣檢查指標非空
2.記憶體分配成功,但沒有初始化就使用它:
int *p=new int;printf("%d",*p);
解決辦法:指標變數習慣初始化null;在使用指標前習慣檢查指標非空
3.記憶體分配成功,也初始化了,但操作越界
int *p=new int[4];for(int i=0;i<=4;i++)
解決辦法:寫**留意
4.忘記釋放記憶體,造成記憶體洩漏
for(int i=0;i<4;++i)
解決辦法:習慣在動態記憶體分配時就立馬寫上釋放,讓分配和釋放邏輯配對
5.釋放了記憶體,卻繼續使用它
int *p=new int;*p=10;delete p;*p=2;
指標釋放後賦空;
int *p=(int *)malloc(sizeof(int));
free(p);
int *p1=new int;(分配單個記憶體,並不初始化)
delete p;
int *p1=new int(1);(分配單個記憶體,並初始化)
int *p2=new int[4];(分配多個記憶體,並不初始化)
int *p2=new int[4];(分配多個記憶體,並初始化)
for(int i=0;i<4;i++)
delete p2;
二級指標?
命名空間
在檔案的基礎上,對檔案裡面的內容再次進行分類
命名空間的語法格式:
namespace 空間表示符
花括號只有兩種情況:1.定義域(必須加分號)2.作用域(可加可不加)
命名空間注意事項:
1.命名空間識別符號必須滿足識別符號命名規則,習慣名字唯一,通常以開發團隊來命名
2.命名空間可以在全域性,也可以在區域性(命名空間接受巢狀定義),但不能在函式類中定義
3.命名空間花括是作用域
4.注意命名汙染,盡量規避同名的出現
命名空間的訪問:
1.using宣告:using mytools::mymul;
放開乙個成員的可見性,這個成員可以在空間外可見(建議使用)
2.using指示:using namespace mymul;
放開該命名空間的所有許可權(所有成員都在空間外可見),適用於空間中大部分成員多次被呼叫
3.命名空間名稱::空間成員名稱
物件導向
物件導向程式設計思維
c語言是面向過程程式設計
優點:易於理解
缺點:不利於擴充套件和維護
對於程式**,吧**分解為若干模組(函式),這是乙個過程式的設計
函式是主體
c++是物件導向的程式設計
優點:利於擴充套件和維護
缺點:不易於理解
資料是主體,函式是資料的介面
物件導向允許設計者從區域性開始設計,逐步加深對整個系統的了解
物件導向的特點:
基於物件的設計思路在結構上更加穩定
避免傳統程式設計中資料和操作的潛在不一致性
軟體可以看做物件與物件之間關係的組合
軟體的可從用性高
動態記憶體分配 命名空間
c 中的動態記憶體分配 c 中通過new關鍵子進行動態記憶體申請 c 中的動態記憶體申請時基於型別進行的 delete關鍵子用於記憶體釋放c語言中是通過庫函式中的malloc函式實現動態記憶體分配 在一些簡單的硬體平台中,可能就不能支援c的記憶體分配了 變數申請 type pointer new t...
C 動態記憶體分配與命名空間
1 c 中的動態記憶體分配 malloc是基於位元組來進行動態記憶體分配的,new則是基於型別來進行動態記憶體分配 變數申請 type pointer new type 從堆空間獲取乙個新的type型別的空間 使用和c語言一樣 delete pointer 這裡指的是pointer所指向的那個元素的...
指標與動態記憶體
碰到乙個指標的問題,記錄一下。都知道,使用指標作為函式形參,可以在函式內修改其指向的內容。將函式的形參返回,會因為生存期的問題,不能得到正確返回值。如果返回的是new出來的指標變數 存在堆上,不在棧上 那麼函式結束,就不會被該記憶體就不會被收回。有以上,我們來看下面的問題 void getmemor...