std :: make_unique可以将函数的输出作为参数吗?

时间:2019-05-03 09:22:20

标签: c++ smart-pointers unique-ptr

是否可以使用make_unique并将函数的输出作为参数传递?

auto loadedSurface1 = std::unique_ptr<SDL_Surface,SurfaceDeleter>(IMG_Load(path.c_str()));
auto loadedSurface2 = std::make_unique<SDL_Surface, SurfaceDeleter>();
loadedSurface2.reset(IMG_Load(path.c_str()));
auto loadedSurface3 = std::make_unique<SDL_Surface, SurfaceDeleter>(IMG_Load(path.c_str())));

SurfaceDeleter是一个函子。

loadedSurface1和loadedSurface2都可以正常工作。 loadedSurface3失败(没有重载函数的实例与参数列表匹配)

如果没有办法使loadedSurface3正常工作,则建议在loadedSurface1上使用loadsSurface2,因为它使用了make_unique?

1 个答案:

答案 0 :(得分:4)

  

是否可以使用make_unique并将函数的输出作为参数传递?

std::make_unique<T>使用构造函数参数来创建新的T。不需要T*到现有T

此外,you can't specify a deleter with it like that

您的意思很简单:

std::unique_ptr<SDL_Surface, SurfaceDeleter> loadedSurface3{IMG_Load(path.c_str())};

  

在loadSurface1上是否建议使用loadSurface2,因为它使用了make_unique?

我在那里看不到任何好处。您所要做的就是将构造分为两行,并删除删除器。