我正在使用一个库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;
});
但是因为堆损坏而失败。
感谢您的投入。
答案 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/delete
,new [] / 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
。