簡體   English   中英

在C ++中刪除和釋放向量內存的正確方法(防止與內存相關的錯誤)

[英]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>方法和析構函數。 數據將在作用域(功能或程序)的末尾釋放。

因此,您的問題的答案將是:您不需要調用clearswap

由於上述問題中的vector<int>對象是具有automatic存儲的變量-因此,超出范圍時將被自動銷毀。 當容器對象超出范圍時,將調用其析構函數,該析構函數進而釋放用於存儲所包含元素的空間,並且在此步驟中,還將針對所有所包含元素調用析構函數(在用戶定義類型的情況下)。 因此,如果我們僅計划int元素,則無需執行任何其他操作。 但是如果如果T*包含類型,則我們將發生內存泄漏,其中T是某些用戶定義的類型,因為在這種情況下,不會為指向對象顯式調用析構函數。

您關於內存泄漏的說法使問題的整體含義不清楚。 當向量超出范圍時,將釋放內存。 應該沒有內存泄漏。

在大型項目中,通常需要一個向量在超出范圍之前在某個點釋放其分配。 失敗不是內存泄漏,而是一個問題。 為此, .clear()是無用的。 您建議的swap方法(不帶.clear )有效。 沒有swap我不知道有什么辦法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM