无法使用std :: unique_ptr初始化指针

时间:2019-08-27 20:27:17

标签: c++ c++14 new-operator unique-ptr

我的类中有一个对象,并且已声明该对象而未进行任何初始化:

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的头文件没什么特别的(只是一个片段):

class TransformBroadcaster{
public:
  /** \brief Constructor (needs a ros::Node reference) */
  TransformBroadcaster();

我尝试在头文件中使用原始指针:

tf::TransformBroadcaster* tfb_;

以及在我的构造函数中:

tfb_ = new TransformBroadcaster()

成功了。知道为什么吗?

1 个答案:

答案 0 :(得分:6)

由于没有TransformBroadcaster的构造函数以TransformBroadcaster*作为输入,因此无法使用这样的参数调用std::make_unique<TransformBroadcaster>()

简而言之,这行:

tfb_ = std::make_unique<tf::TransformBroadcaster>(new tf::TransformBroadcaster());

应该是这样:

tfb_ = std::make_unique<tf::TransformBroadcaster>();