[英]Proper way to delete and free up memory of a vector (prevent different memory related errors) in c++
創建向量:
std::vector<int> pqrs;
以適當的方式刪除以釋放函數內的所有內存(防止內存泄漏和其他與內存相關的問題):
pqrs.clear();
std::vector<int>().swap(pqrs);
我的問題是:既需要清除又需要交換(例如調用析構函數)? 或交換足以滿足所有目的。
在std::vector<int>
情況下,您無需執行clear()
或swap
到空閑內存,因為std::vector<int>
元素( int
s)是由std::vector<int>
自動分配和釋放的std::vector<int>
方法和析構函數。 數據將在作用域(功能或程序)的末尾釋放。
因此,您的問題的答案將是:您不需要調用clear
或swap
。
由於上述問題中的vector<int>
對象是具有automatic
存儲的變量-因此,超出范圍時將被自動銷毀。 當容器對象超出范圍時,將調用其析構函數,該析構函數進而釋放用於存儲所包含元素的空間,並且在此步驟中,還將針對所有所包含元素調用析構函數(在用戶定義類型的情況下)。 因此,如果我們僅計划int
元素,則無需執行任何其他操作。 但是如果如果T*
包含類型,則我們將發生內存泄漏,其中T
是某些用戶定義的類型,因為在這種情況下,不會為指向對象顯式調用析構函數。
您關於內存泄漏的說法使問題的整體含義不清楚。 當向量超出范圍時,將釋放內存。 應該沒有內存泄漏。
在大型項目中,通常需要一個向量在超出范圍之前在某個點釋放其分配。 失敗不是內存泄漏,而是一個問題。 為此, .clear()
是無用的。 您建議的swap
方法(不帶.clear
)有效。 沒有swap
我不知道有什么辦法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.