我越來越困惑比較Java
和C++
引用:更改其中一個C++指針指向
在下面的代碼Java中的Point p
對象仍然指向(5,5)
對象調用changePoint
後。
這是因爲temp
變量(在chagePoint
)是在堆棧上分配,並在堆保持到p
對象的引用(在main
),但是當我們重新分配臨時它只是指向在堆的另一點對象而不改變main中原始對象Point p
指向的位置。
public static void main(String [] args) {
Point p = new Point(5,5);
changePoint(p);
}
changePoint(Point temp) {
temp = new Point(4,6);
}
現在在C++中,如果我們做exeucting在changePoint
這兩個聲明後,會發生什麼情況(5,5)
對象主要是一回事嗎?當你做*temp = new Point(4,5)
它將簡單地覆蓋p
從主指向的(5,5)
對象正確嗎?但是當你做temp = new Point(4,5)時,主體中的(5,5)
對象是內存泄漏嗎?
int main() {
Point *p = new Point(5,5);
changePoint(&p);
}
changePoint(Point *temp) {
*temp = new Point(4,5);
temp = new Point (5,6);
}
** - 1 **您的代碼無法編譯。請僅發佈**真實代碼**。討論無法編譯的代碼是沒有意義的,如果編譯的話會做什麼。 –
要消除混淆,請不要比較它們。他們是不同的語言。 C++語言有指針*和*引用,它們是不同的。 –
您的C++代碼不使用引用,它使用指針。指針通過複製傳遞給函數。你的函數不會修改原始指針變量的內容。 –