動態記憶體與命名空間

2022-07-19 03:51:11 字數 1974 閱讀 9784

動態記憶體

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