使用后自动释放内存

时间:2018-09-21 09:23:35

标签: c++ c++11 memory-management

我在很多地方都有这样的代码:

some_function_signature() 
{
    T a;
    T b = f1(a);
    T c = f2(b);
    T d = f3(c);
    ...
}

如您所见,在这样的函数中,a传递给f1()以产生b,然后b传递给f2()以产生{ {1}},依此类推。在函数调用(c ...之后,将不使用这些变量。而且它们拥有大容量存储空间(例如f1,f2,f3是大图像数据)。 这里的问题是,在此函数内,累积的内存消耗可能很大,我想减少这一点。等待T的析构函数释放内存,将使T的峰值内存使用量非常大。

我可以在使用后执行以下操作以释放内存:

some_function_signature()

我想知道是否可以使此过程自动化且更加优雅。例如,范围内存管理过程或使用某种类型的引用计数,但是我只是不知道如何在此处最好地应用这些方法。

2 个答案:

答案 0 :(得分:6)

这看起来像是移动语义的情况。确保Tf1/2/3支持移动语义,并将示例更改为

some_function_signature() 
{
    T a;
    T b = f1(std::move(a));
    T c = f2(std::move(b));
    T d = f3(std::move(c));
    ...
}

这将允许T f1(T&& t)回收移入的图像。

答案 1 :(得分:0)

您可以尝试以下操作:

T d; 
{
    T c; 
    {   
        T b; 
        {   
            T a; 
            b = f1(a); 
        } //a goes out of scope and is destroyed here 
        c = f1(b); 
    } //b goes out of scope and is destroyed here
    d = f3(c);  
}//c goes out of scope and is destroyed here