如何在函数结束时有效地释放矢量内存

How do I effectively release vector memory at the end of the function?

本文关键字:释放 内存 有效地 函数 结束      更新时间:2023-10-16

在我的代码中,我定义了一个数组:

std::vector< std::pair<int,int> > *line_sep=new std::vector< std::pair<int,int> > [16];

在我的测试中,当我使用delete []line_sep;时,我发现我的计算机内存使用量正在缓慢上升。我只想释放line_sep记忆。

16 对向量..经验

std::vector< std::pair<int,int> > *line_sep=new std::vector< std::pair<int,int> > [16];
for(int i=0;i<16;i++){
    for(int j=0;j<1700;j++){
        if(....)line_sep[i].push_back({Begin,End}); 
    }
}
fun(line_sep);
delete []line_sep;

是的,您可以使用delete[] line_sep;来释放它。 使用 new[] 分配的任何内容都必须使用 delete[] 释放。

但是,最好使用其他std::vector而不是使用原始指针:

typedef std::pair<int, int> IntPair;
typedef std::vector<IntPair> IntPairVec;
std::vector<IntPairVec> line_sep(16);
for(int i = 0; i < 16; ++i)
{
    for(int j = 0; j <1700; ++j)
    {
        if (....)
             line_sep[i].push_back(std::make_pair(Begin, End));
    }
}
fun(&line_sep[0]);

或者,在 C++11 及更高版本中,std::unique_ptr也可以工作:

using IntPair = std::pair<int,int>;
using IntPairVec = std::vector<IntPair>;
std::unique_ptr<IntPairVec[]> line_sep(new IntPairVec[16]);
for(int i = 0; i < 16; ++i)
{
    for(int j = 0; j <1700; ++j)
    {
        if (....)
             line_sep[i].push_back({Begin, End});
    }
}
fun(line_sep.get());