如何为常量 std::vector<unsigned char 释放内存>

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

本文关键字:char unsigned 释放 内存 gt lt std vector 常量      更新时间:2023-10-16

我使用的是一个库api,它返回conststd::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

void myFunc()
{
    const std::vector<unsigned char> myvar = getData();
} // <----- Like this

Vector将负责在其包含范围结束时销毁其自己的内容。记住,你不需要delete,除非你new

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

{
  const std::vector<unsigned char> v('a', 1000); // size 1000 vector
} // v's destructor called here.

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