从 pcl::P ointCloud 创建一个 pcl::P ointCloud::P tr
Create a pcl::PointCloud::Ptr from a pcl::PointCloud
我想知道这是否可能。我有一个功能:
pcl::PointCloud<pcl::PointXYZRGB> createPointCloud(std::Vector<Nodes> input)
返回一个点云。我想知道是否有可能获取此点云,并指向它的副本。PCL 像这样制作指向云的指针:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(new pcl::PointCloud<pcl::PointXYZRGB>)
我试过这样做:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(createPointCloud(nodeList))
这会导致一个非常明显的错误,即createPointCloud不返回指向云的指针。
我也试过这个:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR = &createPointCloud(nodeList)
而这个:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(&createPointCloud(nodeList))
这会导致编译错误:"获取临时地址">
是让函数返回指针类型的唯一选择,还是有办法完成我所要求的?
编辑:
以下两个答案都是正确的,我给了乔纳森正确的勾号,因为他这次先进去了。
是的,使用 makeShared(( 方法。
我知道
这很旧,可能对 OP 没有用,但其他用户可能会偶然发现它。我建议这样做如下:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(new pcl::PointCloud<pcl::PointXYZRGB>);
*cloudPTR = createPointCloud(nodeList);
Jonathon的回答是危险的原因是Pointcloud::P tr是boost::shared_ptr的typedef,这意味着所指向对象的所有权。然而,在他的回答中,该对象实际上是一个局部变量,这意味着它可能超出范围,而仍然有对它的引用,并且shared_ptr最终将对其调用删除,这是未定义的行为。
另一方面,使用 make_shared(( 深度复制云。该程序将正常工作,但是如果您不需要额外的副本,则远非最佳。
相关文章:
- 如何获取pcl迭代最近点(ICP)的迭代点数?
- 将 PCL 链接到 Cython C++ 模块
- PCL:当我在setConditionFunction中使用std::bind 时,没有合适的转换函数
- PCL octree std::bad_alloc c++
- 在点云库 (PCL) 中使用自定义点类型的问题
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- PCL:将两个点云缩放到相同的大小
- 在同一项目中使用 CGAL 和 PCL
- PCL 中的 GICP 用法
- 退出 PCL 查看器:即使窗口已关闭,wasStop() 也不会更改值
- 使用pcl transformcloud将三维点平移并旋转到原点
- 使用pcl库设置错误
- 如何在ROS中使用PCL可视化动力学数据的表面法线
- 如何获取指向 pcl::P ointCloud 中点的指针
- 从 pcl::P ointCloud<pcl::P ointXYZRGB 中删除点>
- 为 pcl::P ointCloud 数据指定一个区域并获取可用点数
- pcl::VoxelGrid<PointXYZ> 无法与 pcl::P ointCloud <PointXYZ>一起使用
- 拥有云pcl::P ointCloud<xyzrgb>,如何独立计算每个颜色层的直方图?
- 将 pcl::P ointCloud 转换为 Eigen::MatrixBase
- 从 pcl::P ointCloud 创建一个 pcl::P ointCloud::P tr