0

我在一个函数中分配了多个资源,因此有很多指针,我必须在离开函数之前返回一个指针(比如说 ret_ptr)并释放其他指针(所有 othr_ptr)。

我在此函数中有多个退出点(其中 ret_ptr 为 0 或指向有效内存或异常)。因此,在所有返回语句和异常(捕获块)之前,我必须删除 othr_ptrs(在函数中多次执行)。“ScopeGuards”有什么办法可以减少多次清理吗?

X* func()
{
    try

    {
        A* a = new ..;
        B* b = new ..;


        if (something)
        {
            delete a;
            delete b;
            return 0;  // return NULL ptr  
        }

        X* x = new ..;
    }
    catch(...)
    {
        delete a;
        delete b;
        return x; 
    }

    delete a;
    delete b;
    return x; 
}
4

1 回答 1

1

您可以使用std::unique_ptr(C++ 11),您的示例如下:

std::unique_ptr<X> func()
{
    std::unique_ptr<X> x;
    try
    {
        std::unique_ptr<A> a(new A);
        std::unique_ptr<B> b(new B);

        if (something)
        {
            return nullptr;
        }
        x.reset(new X);
    }
    catch (...)
    {
        return std::move(x);
    }
    return std::move(x);
}
于 2014-07-01T12:23:11.447 回答