在我的應用我創建並返回充滿了動態分配的對象從派生類像這樣的數組:刪除動態創建的對象
void someGetter(std:vector<DerivedClass> & returnV)
{
BaseClass* base = object->clone(); // "object" is a "unique_ptr<BaseClass>"
DerivedClass* derived = dynamic_cast<DerivedClass*> (base);
if (derived != nullptr)
{
returnV.push_back(*derived);
}
else
{
delete base;
}
}
這顯然造成內存泄漏(valgrinds幫助我在這裏),因爲派生永遠不會被刪除。
我試圖釋放所分配的內存是這樣的:
delete &returnV[0];
它不給任何編譯錯誤/警告和代碼仍然運行正常。但valgrind會在該行代碼中報告一些額外的錯誤(無效讀取,無效的自由),並且泄漏仍然存在。
有沒有什麼方法可以釋放像這樣返回的內存?或者我應該返回unique_ptr而不是對象?
東西(以及作爲地下室裏的人)尖叫「可怕的虐待」......如果你有'EvenMoreDerivedClass'呢?這將在副本中瓜分... –
對於C++ 11的問題:你真的應該使用'的std :: unique_ptr'(或'的std :: shared_ptr',根據您的使用情況)。手動內存管理實際上不被推薦,因爲內存泄漏的潛力(由於缺少像代碼中的delete一樣,或者由於不處理引發異常的情況)非常高。所以我的建議永遠不會(通常有一些例外,儘管不是很多)使用手動管理,並始終使用智能指針(或諸如boost指針容器之類的東西)。 – Grizzly
@Grizzly與Kerrek的第二個答案我不這樣做手工的內存管理了 – Minion91