使用后自动释放内存

jam*_*mes 1 c++ memory-management c++11

有很多地方我得到这样的代码:

some_function_signature() 
{
    T a;
    T b = f1(a);
    T c = f2(b);
    T d = f3(c);
    ...
}
Run Code Online (Sandbox Code Playgroud)

如您所见,在这样的函数中,a传递f1()给生成b,然后b传递f2()给生成c,等等.函数调用(f1,f2,f3...)后不会使用这些变量.并且它们拥有大容量存储器(例如,T是大图像数据).这里的问题是在这个函数中,累积的内存消耗可能很大,我想减少它.等待T的析构函数释放内存将使峰值内存使用量some_function_signature()非常大.

我可以做这样的事情来使用后释放内存:

some_function_signature() 
{
    T a;
    T b = f1(a); a.free();
    T c = f2(b); b.free();
    T d = f3(c); c.free();
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可以使这个过程自动且更优雅.例如,作用域内存管理过程或使用类型的引用计数,但我只是不知道如何最好地应用这些方法.

MSa*_*ers 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));
    ...
}
Run Code Online (Sandbox Code Playgroud)

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