std :: find_if映射到对象

时间:2019-05-25 12:14:59

标签: c++ c++11 c++17

我应该使用示例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);
}

1 个答案:

答案 0 :(得分:1)

如果您不会在调用5和使用vec之间修改find_if,那么请像shared_ptr中那样引用元素以避免不必要的操作调整参考计数。如果不能确定是否确实如此,请按example2中的值复制shared_ptr