std :: find_if отобразить на объект - PullRequest
0 голосов
/ 25 мая 2019

Должен ли я использовать пример 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 Ответ

1 голос
/ 28 мая 2019

Если вы не будете изменять vec между вызовом find_if и использованием shared_ptr, тогда возьмите ссылку на элемент, как в example2, чтобы избежать ненужных настроек счетчика ссылок.Если вы не можете быть уверены, что это так, скопируйте shared_ptr по значению, как в example.

...