只是為了能夠讓自己講清一些事!
大家都知道,如果想要在在C++的函數(shù)中分配內(nèi)存,那么就只得使用指針的引用傳遞,或是二級(jí)指針
如:
而通常我們在開始的學(xué)習(xí)中,都會(huì)寫成
void MyNew(int* p)
{
p = new int;
}
為什么這樣分配不會(huì)成功呢?
原理很簡單,就是形參傳遞時(shí)的拷貝。
當(dāng)p傳入進(jìn)MyNew的時(shí)候,函數(shù)內(nèi)部會(huì)對其進(jìn)行拷貝。而函數(shù)內(nèi)部真正操作和分配到了內(nèi)存的,就是那個(gè)考貝后的變量。
偽代碼如下:
void MyNew(int* p)
{
int* temp = p;
temp = new int;
}
不言而寓,最終p也沒有得到想要分配給他的址。
而上面兩種方式,采用了引用的,就不會(huì)產(chǎn)生拷貝,自然就不用解釋了。
而采用二級(jí)指針的,我們同樣用偽碼可以看到。
void MyNew(int** p)
{
int** temp = p;
*temp = new int;
}
雖然同樣是進(jìn)行了拷貝,但是由于 temp和p同樣指向一個(gè)地方,則*temp正好就是我們想要分配給它地址的那個(gè)值,所以最后得到了想要的結(jié)果!!!