c++ - 使用 boost::shared_ptr 引用迭代器而不复制数据?

标签 c++ boost

在一个循环中,我需要调用一个参数类型为 pcl::PointIndicesPtr 的函数.这实际上是一个 boost::shared_ptr< ::pcl::PointIndices> .有没有办法在不必复制基础数据的情况下做到这一点?我只能通过使用 make_shared 才能开始工作,如果我理解正确,它会复制对象。

for (std::vector<pcl::PointIndices>::const_iterator it = cluster_indices.begin (); it !=     cluster_indices.end (); ++it)
{          
   pcl::PointIndicesPtr indices_ptr2 =boost::make_shared<pcl::PointIndices>(*it);          
}

例如这会在运行时崩溃:

for (std::vector<pcl::PointIndices>::const_iterator it = cluster_indices.begin (); it !=     cluster_indices.end (); ++it)
{          
   pcl::PointIndices test  = *it;    
   pcl::PointIndicesPtr indices_ptr3(&test);        
}

最佳答案

答案取决于您正在调用的函数的实现以及您的代码对该对象执行的其他操作。没有“唯一正确答案”。

例如,如果函数在返回后无法访问该对象,正确的答案可能是用一个带有虚拟析构函数的 shared_ptr 包装现有对象。但如果该函数存储了 shared_ptr,那将不起作用。

如果您自己的代码从不修改对象,首先使用 make_shared 构造对象可能是正确的答案。但是,如果您的代码修改了对象,而函数期望它以后不会更改,那将不起作用。

你必须根据所有信息做出决定。

要回答的最重要的问题 -- 为什么您正在调用的函数采用 shared_ptr?它有充分的理由吗?如果是这样,那是什么原因?如果不是,为什么不改成引用呢?

关于c++ - 使用 boost::shared_ptr 引用迭代器而不复制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25179328/

相关文章:

c++ - 如何创建可以同时处理多个客户端的 Boost.Asio 服务器?

c++ - 关于类成员自初始化的警告

c++ - C宏是隐式转换的吗?

c++ - Mixin 与 C++ 中的面向策略设计有何不同

c++ - reinterpret_cast,只读访问,普通可复制类型,会出什么问题?

C++ 建立链接步骤 : Undefined symbols for architecture x86_64

c++ - boost 每个问题

c++ - 如何获取 `std::basic_string<CustomClass>`进行编译?

c++ - labeled_graph 中的权重

c++ - 使用 boost 缓冲区进行操作