首先free對應(yīng)的是malloc;
delete對應(yīng)的是new
1. 數(shù)組的時候int *p=(int*)malloc(10*sizeof(int)) 釋放的時候
free(p)即可;這是因為編譯器對malloc做了一些特殊的處理,以保證可以正確釋放內(nèi)存拌消。而當(dāng)int *p=new
int[10]釋放的時候應(yīng)為delete []p,注意[]的作用說明釋放的是一個數(shù)組的內(nèi)存惦积,如果delete
p則只是釋放的p[0]胁住,其余9個int的內(nèi)存沒有釋放;這是因為當(dāng)指明為[]的時候痘儡,編譯器實際上是做了一個循環(huán)來釋放這個數(shù)組的所有內(nèi)存辕万。
2. 在類和對象的時候會有很大區(qū)別。在使用malloc和free來處理動態(tài)內(nèi)存的時候沉删,僅僅是釋放了這個對象所占的內(nèi)存渐尿,而不會調(diào)用這個對象的析構(gòu)函數(shù);使用new和delete就可以既釋放對象的內(nèi)存的同時矾瑰,調(diào)用這個對象的析構(gòu)函數(shù)砖茸。
內(nèi)聯(lián)函數(shù)(一般用于小程序)
1)內(nèi)聯(lián)含函數(shù)比一般函數(shù)在前面多一個inline修飾符。
2)內(nèi)聯(lián)函數(shù)是直接復(fù)制“鑲嵌”到主函數(shù)中去的殴穴,就是將內(nèi)聯(lián)函數(shù)的代碼直接放在內(nèi)聯(lián)函數(shù)的位置上凉夯,這與一般函數(shù)不同,主函數(shù)在調(diào)用一般函數(shù)的時候采幌,是指令跳轉(zhuǎn)到被調(diào)用函數(shù)的入口地址劲够,執(zhí)行完被調(diào)用函數(shù)后,指令再跳轉(zhuǎn)回主函數(shù)上繼續(xù)執(zhí)行后面的代碼休傍;而由于內(nèi)聯(lián)函數(shù)是將函數(shù)的代碼直接放在了函數(shù)的位置上征绎,所以沒有指令跳轉(zhuǎn),指令按順序執(zhí)行磨取。
3)一般函數(shù)的代碼段只有一份人柿,放在內(nèi)存中的某個位置上柴墩,當(dāng)程序調(diào)用它是,指令就跳轉(zhuǎn)過來凫岖;當(dāng)下一次程序調(diào)用它是拐邪,指令又跳轉(zhuǎn)過來;而內(nèi)聯(lián)函數(shù)是程序中調(diào)用幾次內(nèi)聯(lián)函數(shù)隘截,內(nèi)聯(lián)函數(shù)的代碼就會復(fù)制幾份放在對應(yīng)的位置上
4)內(nèi)聯(lián)函數(shù)一般在頭文件中定義扎阶,而一般函數(shù)在頭文件中聲明,在cpp中定義