Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法使用std::unique\u ptr初始化指针_C++_C++14_New Operator_Unique Ptr - Fatal编程技术网

C++ 无法使用std::unique\u ptr初始化指针

C++ 无法使用std::unique\u ptr初始化指针,c++,c++14,new-operator,unique-ptr,C++,C++14,New Operator,Unique Ptr,我的类中有一个对象,我在没有任何初始化的情况下声明了该对象: std::unique_ptr<tf::TransformBroadcaster> tfb_; 我得到一个错误: error: no matching function for call to ‘tf::TransformBroadcaster::TransformBroadcaster(tf::TransformBroadcaster*)’ { return unique_ptr<_Tp>(new

我的类中有一个对象,我在没有任何初始化的情况下声明了该对象:

std::unique_ptr<tf::TransformBroadcaster> tfb_;
我得到一个错误:

error: no matching function for call to ‘tf::TransformBroadcaster::TransformBroadcaster(tf::TransformBroadcaster*)’
     { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
我已尝试在头文件中使用原始指针:

tf::TransformBroadcaster* tfb_;
在我的构造函数中:

tfb_ = new TransformBroadcaster()

它成功了。知道为什么吗?

因为没有
TransformBroadcaster
的构造函数将
TransformBroadcaster*
作为输入,所以不能用这样的参数调用
std::make_unique()

简而言之,这一行:

tfb_ = std::make_unique<tf::TransformBroadcaster>(new tf::TransformBroadcaster());
tfb_u=std::make_unique(新的tf::TransformBroadcaster());
应该是这样的:

tfb_ = std::make_unique<tf::TransformBroadcaster>();
tfb_u=std::使_唯一();

由于没有将
TransformBroadcaster*
作为输入的
TransformBroadcaster的构造函数,因此不能使用此类参数调用
std::make_unique()

简而言之,这一行:

tfb_ = std::make_unique<tf::TransformBroadcaster>(new tf::TransformBroadcaster());
tfb_u=std::make_unique(新的tf::TransformBroadcaster());
应该是这样的:

tfb_ = std::make_unique<tf::TransformBroadcaster>();
tfb_u=std::使_唯一();

因此,如果我不传递任何参数以使_唯一,它将创建指针实例本身?是的,
()
中的部分是要为其创建智能指针的类型的构造函数的参数
tfb_u=std::make_unique()
将使用默认构造函数。@aikhs
make_unique
始终生成指向新实例的指针。您只需给它提供您希望它用来构造该实例的参数。@aikhs您从未将
new
std::make_unique()
一起使用过。如果要使用
new
,则需要如下所示:
tfb_u=std::unique_ptr(新的tf::TransformBroadcaster)或<代码>tfb_uu.reset(新tf::TransformBroadcaster)使用
使_唯一()
更安全。因此,如果我不传递任何参数使_唯一,它将自己创建指针实例?是的,
()
中的部分是要为其创建智能指针的类型的构造函数的参数
tfb_u=std::make_unique()
将使用默认构造函数。@aikhs
make_unique
始终生成指向新实例的指针。您只需给它提供您希望它用来构造该实例的参数。@aikhs您从未将
new
std::make_unique()
一起使用过。如果要使用
new
,则需要如下所示:
tfb_u=std::unique_ptr(新的tf::TransformBroadcaster)或<代码>tfb_uu.reset(新tf::TransformBroadcaster)使用
make_unique()。但是
std::unique\u ptr
有一个默认构造函数,它使用
nullptr
@JesperJuhl来构造
unique\u ptr
可以默认构造,然后通过它的
reset()
操作符=
@JesperJuhl单独用指针初始化。我不清楚你的意思,但我解释为,
std::unique_ptr
必须初始化为一些值,比如引用。但是
std::unique_ptr
有一个默认构造函数,它使用
nullptr
@JesperJuhl构建
unique_ptr
可以默认构造,然后通过其
reset()
操作符=
分别用指针初始化。