C++ 将工厂的RAII作为指针引用的输入
我有一个构造对象的函数,它以指针的引用作为输入:C++ 将工厂的RAII作为指针引用的输入,c++,smart-pointers,raii,C++,Smart Pointers,Raii,我有一个构造对象的函数,它以指针的引用作为输入: void生成器(对象*&) 我称之为: Object* obj = nullptr; generator(obj); ... use obj ... delete obj; 如您所见,用户负责销毁obj。是否有更好的方法使用智能指针或其他解决方案来避免手动内存管理 我无法更改生成器功能。即使您无法修改生成器:(,您仍然可以使用智能指针: Object* obj = nullptr; generator(obj); std::unique_pt
void生成器(对象*&)
我称之为:
Object* obj = nullptr;
generator(obj);
...
use obj
...
delete obj;
如您所见,用户负责销毁obj
。是否有更好的方法使用智能指针或其他解决方案来避免手动内存管理
我无法更改
生成器
功能。即使您无法修改生成器
:(,您仍然可以使用智能指针:
Object* obj = nullptr;
generator(obj);
std::unique_ptr<Object> raii_obj(obj);
...
use obj/raii_obj
...
// auto delete raii_obj.
Object*obj=nullptr;
发电机(obj);
std::唯一的铁路(obj);
...
使用obj/raii_obj
...
//自动删除raii_obj。
您甚至可以将其包装到函数中:
std::unique_ptr<Object> make_object()
{
Object* obj = nullptr;
generator(obj);
return std::unique_ptr<Object>(obj);
}
std::unique_ptr make_object()
{
Object*obj=nullptr;
发电机(obj);
返回标准::唯一的ptr(obj);
}
有没有一种方法可以在不声明原始指针的情况下直接将智能指针与函数一起使用的情况下执行相同的操作?没有,您不能直接修改std::unique\u ptr
的内部指针。只需在generator
周围编写一个包装器。将其命名为generator()