如何在函数结束时有效地释放矢量内存
How do I effectively release vector memory at the end of the function?
在我的代码中,我定义了一个数组:
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());
相关文章:
- 如何在c++中释放内存
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 释放内存(主题模板)时出现问题
- 使用后自动释放内存
- C++ 如何释放内存
- 从函数内对象的向量中释放内存
- C++ 在不释放内存的情况下调用析构函数
- 多个线程之间的获取-释放内存顺序
- C++ - 析构函数只是释放内存还是实际删除对象
- 使用 RAII 替换最终块以释放内存
- 如何通过带有指向基类的指针的删除运算符释放内存
- 代码中的"sprintf"用法是否需要释放内存?
- C++何时使用 delete[] 并正确释放内存?
- 为什么此获取和释放内存围栏不能给出一致的值?
- 抛出新表达式的参数子表达式时释放内存
- 在这种情况下,如何释放内存?
- 在 c++ 中应按什么顺序释放内存?