malloc/free和new/delete here有一個很好的比較,以及malloc()和free()如何工作here的很好的解釋。顯然,我們不能混用它們 - 使用new或free來使用malloc。C++中的malloc/free和new/delete兼容性?
在尊重上述「不混合」規則的同時,我們可以看到許多開源項目,與許多貢獻者一起使用這兩種機制。 Usualy,你在一個文件中只有一種方法(一個作者,一個偏好)。我已經分叉了這樣一個項目,並且使用新的/刪除來添加一些功能。但是我遇到了一些好奇的記憶腐敗。當然,我大概是負責人,但.....
這使我問一些「幼稚」的問題:
我可以有兩種機制的malloc /免費新/刪除在同一個編譯單元(* .o) - 當然,尊重「不混合」規則?
我可以交錯兩個機制,就像在這個代碼中一樣嗎?
int *a = (int *) malloc (1000 * sizeof int); int *b = new int[1000]; // some code free a; delete[] b;
是的,但你甚至不應該在你自己的代碼中使用'new'或'malloc';而不是像'unique_ptr'或'shared_ptr'那樣使用智能指針。 – Simple
我認爲這是合法的。 –
你確定不要爲具有構造函數或析構函數的類型調用malloc()和free()嗎?這些調用不會執行您的類的構造函數和析構函數,因此可能會造成問題。 – Julien