使用 RAII,出厂时将对指针的引用作为输入



我有一个构造对象的函数,它接受对指针的引用作为输入:

void generator(Object*&)

我称之为:

Object* obj = nullptr;
generator(obj);
...
use obj
...
delete obj;

如您所见,用户负责销毁obj。有没有更好的方法来使用智能指针或其他解决方案来避免手动内存管理?

我无法更改generator功能。

即使不能修改generator :(,你仍然可以使用智能指针:

Object* obj = nullptr;
generator(obj);
std::unique_ptr<Object> raii_obj(obj);
...
use obj/raii_obj
...
// auto delete raii_obj.

您甚至可以将其包装在一个函数中:

std::unique_ptr<Object> make_object()
{
    Object* obj = nullptr;
    generator(obj);
    return std::unique_ptr<Object>(obj);
}

相关内容

  • 没有找到相关文章

最新更新