簡體   English   中英

如何為const std :: vector釋放內存<unsigned char>

[英]How to deallocate memory for const std::vector<unsigned char>

我正在使用一個庫api,它返回const std :: vector。 下面是代碼

const std::vector<unsigned char> myvar = getData();

現在我有myvar的清理記憶。 如何用c ++做到這一點。

我正在嘗試類似的東西

std::for_each(myvar.begin(), myvar.end(), [&](unsigned char mychar)
{
    cout<<mychar<<",";


    delete &mychar;

});

但失敗了堆破壞。

感謝您的投入。

STL使用RAII慣用語,它在必要時分配內存並自動解除分配。

你不需要手動釋放myvar ,只是讓myvar超出范圍,所有內存都將自動解除分配。

// new scope, maybe function, maybe if/while scope: 
{
    const std::vector<unsigned char> myvar = getData();
}
// myvar will be deallocated 

注意,總是調用new/deletenew [] / delete[]對,你沒有為任何myvar成員調用new,你根本不需要調用delete

您不必手動刪除該向量的內容。 向量的析構函數將處理所有必要的內存分配,並在對象超出范圍時調用。 例如,

{

  const std::vector<unsigned char> v('a', 1000); // size 1000 vector

} // v's destructor called here.

這是使用標准庫類型的眾多原因之一。 看看不是很恰當的命名資源獲取是初始化,還是RAII

void myFunc()
{
    const std::vector<unsigned char> myvar = getData();

} // <----- Like this

當它在包含范圍的末尾被銷毀時,Vector將負責釋放它自己的內容。 請記住,除非你是new ,否則你不需要delete

暫無
暫無

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

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