任何人都可以在使用PCL时告诉我们使用:: Ptr和new运算符

时间:2017-06-23 07:21:20

标签: point-cloud-library point-clouds

我试图用

声明一个PCL类的对象
typedef pcl::PointCloud<PointNT> PointCloudT;   // in the .h file.

PointCloudT::Ptr object = new PointCloudT();   // in main func
PointCloudT::Ptr scene = new PointCloudT();    // and these two triggers the error of

1&gt; f:\ cpps \ pclrclass \ pclrclass \ main_routine.cpp(10):错误C2440:&#39;初始化&#39; :无法转换为PointCloudT *&#39; to&#39; boost :: shared_ptr&gt;&#39;

但如果声明由

给出,则可行
PointCloudT::Ptr object(new PointCloudT);   // in main func
PointCloudT::Ptr scene(new PointCloudT);    // works and correct

我不擅长C ++而且不知道这个错误的问题是什么。谁能说一点呢。

1 个答案:

答案 0 :(得分:0)

new PointCloudT()表达式生成指向点云的原始指针PointCloudT *

PointCloudT::Ptrboost::shared_ptr<PointCloudT>的同义词,是指向点云的智能指针。您可以查看此模板类here的概要。如您所见,它有一个构造函数

  template<class Y> explicit shared_ptr(Y * p);

在我们的案例中成为

  explicit shared_ptr(PointCloudT * p);

这意味着它可以从指向点云的原始指针构建。注意explicit keyword,它禁止隐式构造和复制初始化。

这就是为什么第一个代码段会出错(您请求两个不同类之间的隐式转换),第二个代码段工作(您显式调用共享指针的构造函数)。