2

我正在使用一个返回 const std::vector 的库 api。下面是代码

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

现在我有 myvar 的清理内存。如何用 C++ 做到这一点。

我正在尝试类似的东西

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


    delete &mychar;

});

但是由于堆损坏而失败。

感谢您的输入。

4

3 回答 3

5

STL 使用RAII 习惯用法,它在必要时分配内存并自动释放。

您不需要手动 dealcoate 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

于 2013-02-04T08:02:45.477 回答
2

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

{

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

} // v's destructor called here.

这是使用标准库类型的众多原因之一。看看不是很恰当地命名的资源获取是初始化,或 RAII

于 2013-02-04T08:02:55.260 回答
2
void myFunc()
{
    const std::vector<unsigned char> myvar = getData();

} // <----- Like this

当 Vector 在其包含范围的末尾被销毁时,Vector 将负责释放其自己的内容。记住,你不需要delete,除非你new

于 2013-02-04T08:03:12.200 回答