【发布时间】:2019-08-27 20:27:17
【问题描述】:
我的类中有一个对象,并且我已经声明了该对象而没有进行任何初始化:
std::unique_ptr<tf::TransformBroadcaster> tfb_;
然后,在构建过程中,我决定初始化我的tfb_:
tfb_ = std::make_unique<tf::TransformBroadcaster>(new tf::TransformBroadcaster());
我收到一个错误:
error: no matching function for call to ‘tf::TransformBroadcaster::TransformBroadcaster(tf::TransformBroadcaster*)’
{ return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
根据我的理解,即使我不是(或者可能是?),我似乎也在尝试传递一个论点。 tf::TransformBroadcaster的头文件没什么特别的(只是一个sn-p):
class TransformBroadcaster{
public:
/** \brief Constructor (needs a ros::Node reference) */
TransformBroadcaster();
我尝试在头文件中使用原始指针:
tf::TransformBroadcaster* tfb_;
在我的构造函数中:
tfb_ = new TransformBroadcaster()
它奏效了。知道为什么吗?
【问题讨论】:
-
@JesperJuhl 我不清楚你的意思,但我解释为
std::unique_ptr必须初始化为一些值,如引用。但是std::unique_ptr有一个默认构造函数,它使用nullptr构造它。 -
@JesperJuhl A
unique_ptr可以默认构造,然后通过其reset()或operator=分别使用指针初始化。
标签: c++ c++14 new-operator unique-ptr