如何将带有新对象的 std::unique_ptr 转换为 std::make_unique? [关闭]

问题描述 投票:0回答:1

我有这段代码将

std::unique_ptr
返回给某种类型的东西。目前,我只是这样写:

return std::unique_ptr<Type1>(new Class<Type2>(
      param1, param2, param3, std::move(param4), param5));

但是,有人告诉我最好使用

std::make_unique()
来编写它,因为它更安全。

我试着这样做:

return std::make_unique<Type1>(
      param1, param2, param3, std::move(param4), param5);

但是当我这样做时,它会吐出一条错误消息:

错误:没有匹配的调用函数

我做错了什么吗?

c++ pointers smart-pointers unique-ptr
1个回答
1
投票

在第一个示例中,您正在使用

Type1
的构造函数创建一个指向
Class<Type2>
的指针(或者它是一个拼写错误,它应该只是
Type2
?)。当你使用
std::make_unique<Type1>(...)
时,它会尝试调用
Type1
的构造函数。所以我的猜测是,如果你看到没有匹配的调用函数,你的
Type1
只是没有能够接受参数的构造函数
param1, param2, param3, std::move(param4), param5

© www.soinside.com 2019 - 2024. All rights reserved.