Fan*_*Fox 12 c++ pointers point-cloud-library
我想知道这是否可行.我有一个功能:
pcl::PointCloud<pcl::PointXYZRGB> createPointCloud(std::Vector<Nodes> input)
Run Code Online (Sandbox Code Playgroud)
返回点云.我想知道是否可以采用这一点云,并指出它的副本.pcl像这样指向云:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(new pcl::PointCloud<pcl::PointXYZRGB>)
Run Code Online (Sandbox Code Playgroud)
我试过这样做:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(createPointCloud(nodeList))
Run Code Online (Sandbox Code Playgroud)
这导致了一个非常明显的错误,即.createPointCloud不会返回指向云的指针.
我也试过这个:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR = &createPointCloud(nodeList)
Run Code Online (Sandbox Code Playgroud)
还有这个:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(&createPointCloud(nodeList))
Run Code Online (Sandbox Code Playgroud)
这导致编译错误:"获取临时地址"
是函数返回指针类型的唯一选择还是有办法做我要求的?
编辑:
以下两个答案都是正确的,我已经给Jonathon这个时候第一次得到了正确的答案.
我知道这很旧,可能对OP不再有用,但是其他用户可能会偶然发现它。我建议这样做如下:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(new pcl::PointCloud<pcl::PointXYZRGB>);
*cloudPTR = createPointCloud(nodeList);
Run Code Online (Sandbox Code Playgroud)
Jonathon的答案之所以危险是因为Pointcloud :: Ptr是boost :: shared_ptr的类型定义,它暗示了所指向对象的所有权。但是,在他的回答中,该对象实际上是一个局部变量,这意味着它可能会超出范围,而仍然有对其的引用,并且shared_ptr最终将对其进行调用delete,这是未定义的行为。
另一方面,使用make_shared()可以深度复制云。该程序可以正常运行,但是如果您不需要多余的副本,那将不是最佳选择。