将 RAII 与工厂一起使用,将对指针的引用作为输入

Use RAII with factory taking as input a reference to pointer

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

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);
}