簡體   English   中英

從pcl :: PointCloud創建一個pcl :: PointCloud :: Ptr

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM