在一个循环中,我需要调用一个参数类型为 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/