如何在函数结束时有效释放向量内存?

时间:2017-05-17 05:27:28

标签: c++ c++11 memory memory-leaks c++builder

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

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

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

16对矢量! EXP

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;

1 个答案:

答案 0 :(得分:2)

是的,您可以使用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());