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