我想知道这是否可能。我有一个函数:
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))这会导致编译错误:“the of temporary”
让函数返回指针类型是唯一的选择吗?或者有没有方法可以做到我所要求的?
编辑:
下面两个答案都是正确的,我已经给了Jonathon正确的选择,因为他这次是第一个进入的。
发布于 2017-07-20 23:57:30
我知道这是旧的,可能对OP没有任何用处,但其他用户可能会偶然发现它。我建议这样做:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(new pcl::PointCloud<pcl::PointXYZRGB>);
*cloudPTR = createPointCloud(nodeList);Jonathon的答案是危险的,因为Pointcloud::Ptr是一个boost::shared_ptr的类型定义,它意味着指向的对象的所有权。然而,在他的回答中,对象实际上是一个局部变量,这意味着当仍然有对它的引用时,它可能会超出作用域,并且shared_ptr最终将对它调用delete,这是未定义的行为。
另一方面,使用make_shared()可以深度复制云。该程序将正常工作,但如果您不需要额外的副本,它远不是最优的。
发布于 2012-05-18 06:44:31
是的,使用makeShared()方法。
https://stackoverflow.com/questions/10644429
复制相似问题