我想知道是否有人可以幫助我解決一些混亂,我有獨特的指針。請看下面的代碼:獨特的指針內存泄漏
// some class "complex" defined here
int main()
{
while(1)
{
unique_ptr<complex> p(new complex[256]);
p.reset();
}
return 1;
}
現在從我的理解,當我的唯一指針調用reset()
應該刪除其原始指針所指的對象。在這種情況下,該對象碰巧是創建的256個類型中的第一個對象,類型爲complex
。因爲這就是new complex[256]
所做的,對嗎?它只是返回一個指向數組中第一個對象的指針(它當然也創建它)?所以剩下的256個對象應該保持不變。
遵循這個邏輯,無限循環應該創建一個內存泄漏,但是這不會發生。我正在使用MS Visual Studio 2013.
我錯過了什麼?我會很感激,如果有人可以填補我在這裏發生了什麼,並確認或拒絕我的猜想
避免'new'和使用'make_unique'會避免這種錯誤的:'自動p =標準:: make_unique(256);' –
Jarod42
怎麼來的日e內存正在被釋放而沒有明確被告知這樣做?這是一個編譯器的特定功能嗎?最後,'std :: default_delete'是否也用於數組特化,假定它用於主模板?真的很感謝快速回復傢伙。 –
MutomboDikey
內存被明確告知要在'unique_ptr'內部釋放。這不是編譯器功能,只是該類如何實現。對於數組的特殊化,'T'應該被看作'complex []',所以'std :: default_delete'會被'delete []' –
wasthishelpful