動態記憶體分配
c++中的動態記憶體分配
(1)c++中通過new關鍵字進行動態記憶體申請
(2)c++中的動態記憶體申請是基於型別進行的
(3)delete關鍵字用於記憶體釋放
變數申請:
type* pointer =new type;
delete pointer;
陣列申請:
type* pointer =new type[n];
delete pointer;
c語言中的動態記憶體分配是用c語言標準庫中的malloc和free兩個函式來進行的,他倆是標準庫提供的函式,所以他倆不是c語言中的一部分,只是標準庫的一部分。
c++新增了兩個關鍵字new和delete,他倆是c++中動態記憶體分配的關鍵字,是c++語言的一部分。
int main()
delete p;
return 0; }
new關鍵字與malloc函式的區別
(1)new關鍵字是c++的一部分,malloc是由c庫提供的函式
(2)new以具體型別為單位進行記憶體分配,malloc只能以位元組為單位進行記憶體分配
(3)new在申請單個型別變數時可以進行初始化,malloc不具備記憶體初始化特性
new關鍵字初始化
int main()
c++中的命名空間
1.在c語言中只有乙個全域性作用域
(1)c語言中所有的全域性識別符號共享同乙個作用域:識別符號之間可能發生衝突。
2.c++中提出了命名空間的概念
(1)命名空間將全域性作用域分成不同的部分;
(2)不同命名空間中的識別符號可以同名而不會發生衝突;
(3)命名空間可以相互巢狀;
(4)全域性作用域也叫預設命名空間。
3.c++命名空間定義:
namespace name
namespace first
namespace second ;
} }c++命名空間的使用:
(1)使用整個命名空間:using namespace name;
(2)使用命名空間中的變數:using name::variable;
(3)使用預設命名空間中的變數: ::variable
預設情況下可以直接使用預設命名空間中的所有識別符號。
c++命名空間的使用:
namespace first
namespace second ;
} }int main() ;
printf("p.x=%d\n",p.x);
printf("p.y=%d\n",p.y);
return 0; }
強制型別轉換
1.c方式強制型別轉換
(type)(expression) or type(expression)
typedef void(pf)(int);
struct point ;
int main()
編譯沒有出錯,執行出錯
c方式的強制型別轉換存在的問題
(1)過於粗暴:任意型別之間都可以進行轉換,編譯器很難判斷其正確性;
(2)難於定位:在原始碼中無法快速定位所有強制型別轉換的語句;
在程式設計理論中強制型別轉換時不被推薦的,與goto語句一樣,應該盡量避免。
現代軟體產品中有三個大問題是bug的源泉:(1)運算子優先順序;(2)多執行緒程式設計的時候各執行緒之間的互動;(3)強制型別轉換。
強制型別轉換在實際工程中還是可能使用的,如何進行更加安全可靠的轉換?
c++將強制型別轉換分為四種不同的型別
static_cast
const_cast
dynamic_cast
reinterpret_cast
用法:***_cast(expression)
type是最終要轉換的目標
static_cast強制型別轉換
(1)用於基本型別之間的轉換,但不能用於基本型別指標間的轉換
(2)用於有繼承關係類物件之間的轉換和類指標之間的轉換
int main()
static_cast是編譯期進行轉換的,無法在執行時檢測型別,所以類型別之間的轉換可能存在風險。
const_cast強制型別轉換:用於去除變數的const屬性
reinterpret_cast強制型別轉換:
(1)用於指標之間的強制型別轉換
(2)用於整數和指標型別之間的強制轉換
typedef void(pf)(int)
int main()
reinterpret_cast直接從二進位制位進行複製,是一種極其不安全的轉換。
dynamic_cast強制型別轉換
(1)主要用於類層次間的轉換,還可以用於類之間的交叉轉換
(2)dynamic_cast具有型別檢查功能,比static_cast更安全
小結(1)c++中內建了動態記憶體分配的專用關鍵字;
(2)c++中的動態記憶體分配是基於型別進行的;
(3)c++中的命名空間概念用於解決名稱衝突的問題;
(4)c++細化了c語言中強制型別轉換的方式
-----c++中不推薦在程式中使用強制型別轉換
-----c++中建議在強制型別轉換時考慮一下究竟希望什麼樣的轉換
C 第三課 新的關鍵字
一 動態分配記憶體的時的關鍵字 注意在c 中和c不一樣的是,在c中使用的malloc來動態分配記憶體,而這個malloc只是標準c庫的呼叫,所以這個不屬於標準c的範疇,而在c 中卻有真正的關鍵字來分配記憶體,而這個關鍵字就是new,相應的釋放記憶體的關鍵字是delete。動態記憶體分配關鍵字使用示例...
c 新關鍵字詳解
alignof用於獲取取指定表示式指定的 類似sizeof,可以直接是型別名 的對齊 alignment alignas用於宣告時指定對齊類似於現有的型別。和sizeof類似,兩者的運算元都不被求值。類似const但更強大,修飾函式或物件,表示函式結果或物件是編譯時決定的常量,以便優化。const不...
新的關鍵字(記錄 理解)
變數申請 type pointer new type delete pointer 陣列申請 type pointer new type n delete pointer int main delete p 將p指向的堆空間中的整個陣列大小 10個int大小記憶體 釋放 如果只是delete p 則...