使用RAII,工厂将指针作为输入

时间:2015-01-21 08:15:45

标签: c++ smart-pointers raii

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

void generator(Object*&)

我将其称为:

Object* obj = nullptr;
generator(obj);

...
use obj
...
delete obj;

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

我无法更改generator功能。

1 个答案:

答案 0 :(得分:6)

即使您无法修改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);
}