C++学习-3
引用與函數指針:
函數指針就是把函數名挖掉變成*p
函數指針的類型就是把p去掉
函數指針的引用(引用就是在類型和名字的中間加&)
函數指針加一個()就成調用函數了-----------p()
總結:
???????? 1.相當于初始化int*(函數指針類型 - 包含返回類型和參數)
??? 2.初始化相當于初始化函數塊,相當于能做什么事
??? 1的初始化是初始化函數本身
??? 2的初始化才是真正意義上的傳參
??? 1(函數體初始化)
??? 2(參數實例化)
總結一下:單單的函數指針定義沒有任何實際含義(只是一個空的接口)
初始化相當于賦予函數塊功能
然后的調用才是傳參引用與指針
引用與指針
引用是棧上的
引用本質是指針
引用不能動態開辟內存(堆)
也是四個字節
3.函數指針數組與引用
int(*p[4])(int a, int b) {add,sub,mul,divv};
??? //二級指針開辟函數指針數組
??? int(**pp)(int a, int b) { new(int(*[4])(int, int)){ add,sub,mul,divv } };
個數一定是緊跟在變量名后!!!!
返回值是函數指針的搞法:把指針名挖掉換成函數名,加()里面加參數就完了
4.全局變量優先于main函數
Free不會調用析構函數,delete會調用析構函數
Malloc和free無法調用構造函數和析構函數
只能用new和delete。
內置類型沒有就一樣的效果
給我的感覺就是:構造函數和析構都只是對內容的初始化和銷毀,真正對內存進行創建和銷毀的是new和delete;
5.基本數據類型:數組 delete p 和delete []p是一樣的
復合數據類型,單個直接delete,復合的就要delete[]p;
單個你去加[]相當于無限刪除
6.new和delete的重載
void *operator new(size_t? size)
new不管是局部還是全局都會調用一次構造函數
void *operator new[](size_t? size)
數組傳進去的size多四個字節記錄調用構造函數的次數
真正的個數是size-4
void operator delete(void *p)
這里傳的是開辟空間的首指針,
void operator delete[](void *p)
如果是類類型,由于delete調用析構函數的次數時根據new調用構造函數的次數來決定的(構造函數會傳給delete一個數字四個字節)所以全給delete[]的指針要是劃分的首地址,傳進去的p是總開辟大小的首地址
局部的重寫使用全局作為輔助
全局的重寫需要使用malloc和free
空類還是占一個字節
New->::new->malloc->構造函數
New->構造函數
析構函數->delete
析構函數->delete->::delete->free
分配內存優先于構造函數
析構優先于釋放內存
7.容器操作:
????????????????? Pushback,pushfront,clear,assign,back,front,pop_back,pop_front,reverse,sort
Merge歸并,前提是每個容器都要是有序的
8.類的空指針可以調用類的函數,代碼區是共享的,數據是獨立
可以調用,不能訪問數據
9.new和delete
?????? 整個內存分配的過程:
????????????? New:
new一塊足夠大的未類型化的內存
調用構造函數初始化這片內存
返回指向該內存對象的指針
Delete:
調用析構函數
Operator delete標準庫函數釋放該對象的內存
?
現總結C++語言中不能重載的操作符有:
.??????????? .*???????????? ::?????????? ?:
new????????? delete???????? sizeof?????? typeid
static_cast? dynamic_cast?? const_cast?? reinterpret_cast
?
?
可以重載的操作符有:
operator new????? operator delete
operator new[]??? operator delete[]
+?? -?? *?? /?? %?? ^?? &?? |?? ~
!?? =?? <?? >?? +=? -=? *=? /=? %=
^=? &=? |=? <<? >>? >>= <<= ==? !=
<=? >=? &&? ||? ++? --? ,?? ->*? ->
() []
?
?
10.new(關鍵字)一下時包含兩個子操作operator new(操作符)和構造函數
?
轉載于:https://www.cnblogs.com/tony-xu999/p/8573972.html
總結
- 上一篇: Mysql 新建用户并分配所有权限
- 下一篇: 【Electron】C++ 扩展Node