[英]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))
這導致編譯錯誤:“獲取臨時地址”
是函數返回指針類型的唯一選擇還是有辦法做我要求的?
編輯:
以下兩個答案都是正確的,我已經給Jonathon這個時候第一次得到了正確的答案。
是的,使用makeShared()方法。
我知道這是舊的,可能不再使用OP,但其他用戶可能偶然發現它。 我建議這樣做:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(new pcl::PointCloud<pcl::PointXYZRGB>);
*cloudPTR = createPointCloud(nodeList);
Jonathon的答案很危險的原因是Pointcloud :: Ptr是boost :: shared_ptr的typedef,暗示了所指向對象的所有權。 然而,在他的回答中,該對象實際上是一個局部變量,這意味着它可能會超出范圍,而仍有對它的引用,而shared_ptr最終會調用delete,這是未定義的行為。
另一方面,使用make_shared()深度復制雲。 該程序將正常工作,但如果您不需要額外的副本,它遠非最佳。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.