Указатель на ссылку: изменение значения оригинала - PullRequest
1 голос
/ 21 марта 2019

У меня где-то хранится вектор объекта People

std::vector<People> people;

Теперь я нахожу некоторых особых людей и получаю их ссылку, затем получаю их указатель и сохраняю в векторе:

std::vector<People*> newlist;

Как я получаю этот список:

People& specialPeople = getSomeSpecialGuyFrom(people); // get a referece 
newlist.push_back(&specialPeople);
// New I sort the newlist by some property, assuming it's not empty:
std::nth_element(newlist.begin(),
                 newlist.begin() + 1,
                 newlist.end(),
                 [](const People* p1,
                    const People* p1) {
                   return p1->reputation > p2->reputation;
                 });
newlist[0]->name = "Best one";

Обратите внимание, что я не изменяю исходный вектор людей. Смысл хранения указателей в том, чтобы сделать сортировку дешевой. Теперь мой вопрос, последнее назначение, это меняет исходный вектор людей? Из того, как я читаю код, он должен, но на практике я вижу противоположный результат? Извините, я не могу использовать реальный код здесь ...

1 Ответ

2 голосов
/ 21 марта 2019

последнее назначение, это меняет исходный вектор людей?

Это зависит.

Ответ положительный, если и только если getSomeSpecialGuyFrom возвращает ссылку на объект в исходном векторе людей и ссылка / указатель не были признаны недействительными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...