如何为const std :: vector <unsigned char =“”> </unsigned>释放内存

时间:2013-02-04 08:01:07

标签: c++ memory-management vector

我正在使用一个库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;

});

但是因为堆损坏而失败。

感谢您的投入。

3 个答案:

答案 0 :(得分:5)

STL使用RAII idiom,,它在必要时分配内存并自动解除分配。

您无需手动释放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成员拨打新电话,根本不需要致电delete

答案 1 :(得分:2)

您不必手动删除该矢量的内容。向量的析构函数将处理所有必要的内存分配,并在对象超出范围时调用。例如,

{

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

} // v's destructor called here.

这是使用标准库类型的众多原因之一。看一下名字不太合适的resource acquisition is initialization, or RAII

答案 2 :(得分:2)

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

} // <----- Like this

当它在包含范围的末尾被销毁时,Vector将负责释放它自己的内容。请注意,除非delete,否则您不需要new