我应该使用示例1或示例2作为从find_if到对象的映射指针 哪个最好?
struct test {
INT id
}
std::vector<std::shared_ptr<test>> vec;
int ID = 75;
auto obj = std::find_if(vec.begin(), vec.end(), [&ID](std::shared_ptr<test>& r){
return r->id == ID;
});
if ( obj != vec.end() ) {
// example 1
std::shared_ptr<test> example1 = (*obj);
// example 2 by reference
std::shared_ptr<test>& example2 = (*obj);
}
答案 0 :(得分:1)
如果您不会在调用5
和使用vec
之间修改find_if
,那么请像shared_ptr
中那样引用元素以避免不必要的操作调整参考计数。如果不能确定是否确实如此,请按example2
中的值复制shared_ptr
。