2012-08-30 33 views
2

我只是在想當我們在C++中使用free()new時會發生什麼。我們是否有C++中的晃動對象的概念

如果我們使用free()new,則內存可以被釋放。它只是析構函數不會被調用。離開行爲類似於懸掛指針。

我知道上面我們不應該使用free()new,因爲它可能會破壞堆。

但是我也想從概念上想象行爲。

+3

「我只是在想當我們在C++中使用free()和new()時會發生什麼。」沒有意義。這是未定義的行爲。根本沒有理由甚至打擾它。 –

+0

我沒有聽說過你描述的情況的具體術語。我只希望有人說內存被回收了,但是析構函數沒有觸發...... –

回答

8

在由new分配的內存上使用free是未定義的行爲。不能保證new返回從malloc返回的地址。 (實際上,new[]通常不會。)

+1

+1,不能保證內存來自'malloc'! –

1

你不應該混合這些。 newdelete成對配對,就像mallocfree一樣。

請記住,應用程序可以完全重新定義new的行爲,並且可以使用與堆完全無關的分配策略。正因爲如此,你不能依靠free來完成任何事情,並且使用new生成的指針。他們是兩個不同的世界。

+0

我想他知道,他只是想知道這個情況是否有一個特定的術語。 –

+0

「未定義的行爲」? – tadman

+0

@Doug術語是未定義的行爲。 – Flexo