![](/img/trans.png)
[英]How can I cast an std::vector<const unsigned char> to a 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/delete
, new [] / 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.