我的问题是:退出函数时默认情况下,函数内部分配的内存是否取消分配?
例如:
double* calc(int res_size, int max)
{
double* p = new double[max];
double res = new double[res_size] ;
// use p to calculate results to be put in res
return res;
}
我们是否在为程序的其余部分泄漏内存?
答案 0 :(得分:0)
是的,p
在您失去范围后泄露,我认为您的意思是double* res
而不是double res
- 如果是这样,那应该没问题,因为您将其传回在堆栈上。
答案 1 :(得分:0)
是的,p
在您的情况下泄露。你可能想试试这个:
double* calc(int res_size, int max)
{
double* p = new double[max];
double* res = new double[res_size] ;
// use p to calculate results to be put in res
delete[] p;
return res;
}
答案 2 :(得分:0)
退出函数时默认情况下,在函数内部分配的内存是否取消分配?
是的,如果你使用适当的RAII包装来管理内存/资源,就像这样
#include <memory>
double* calc(int res_size, int max)
{
std::unique_ptr<double[]> p(new double[max]);
std::unique_ptr<double[]> res(new double[res_size]);
// use p to calculate results to be put in res
return res.release();
// we're not leaking p, it'll get deleted on function exit
// we're returning res, which should be managed by the caller accordingly
}
我们是否在为程序的其余部分泄漏内存?
是的,对于您发布的功能;不,对于上面的那个。