所以我看到有配對內存管理功能,如malloc/free
,new/delete
,並new[]/delete[]
,但有時你不能總是叫new
或new[]
,你還有叫delete
,delete[]
,或free
。例如,strdup就是封裝內存分配的一個函數,你以後還得自己釋放內存。C++何時使用delete []並正確釋放內存?
那麼你什麼時候知道釋放記憶,如果你在某種意義上並不總是寫着new
或malloc
?我特別好奇deleting arrays of objects。只是簡單的數組。因爲,這似乎是delete[]
的用例之一。 (我在看cplusplus。)
那麼,這是否有效?這是必要的嗎?有什麼缺失?
unsigned char bytes[4] = {0xDE, 0xAD, 0xBE, 0xEF};
for(int i = 0; i < 4; i++)
std::cout << std::hex << +bytes[i];
delete[] bytes;
bytes
在技術上是一個unsigned char *
類型,對不對?我知道我在技術上有一個指針,但因爲這不是一個對象數組,所以我不確定它是否會被自動銷燬。
你只需要'delete' /'刪除[]'您以前使用創建的東西'new' /'新[]' – SingerOfTheFall
這未必是真實的 - 'strdup'可能導致內存泄漏如果你不刪除。 – Peri461
'strdup'是非標準的,你應該'free()'它返回的指針,而不是'delete'它,因爲它在內部使用'malloc'。 – SingerOfTheFall