расширение диапазона соединения и временный объект join_range - PullRequest
0 голосов
/ 15 марта 2020

Только начал изучать библиотеку Boost Range, но не смог найти ответ в документации. Приведенный ниже код компилируется с использованием VS2017 и работает как положено (перечисленные номера с 1 по 9). Вопрос в том, считается ли реализация метода my_range безопасной? Второе выражение boost :: join использует параметр ("jr") из первого boost :: join, который выйдет из области видимости go после завершения метода. Есть ли шанс, что этот метод может вернуть недопустимый объект boost :: range :: join_range?

Оцените любой ввод: -)

struct foo
{
  typedef boost::range::joined_range<
    boost::range::joined_range<
      std::vector<int>, 
      std::vector<int>>, 
    std::vector<int>> range;

  std::vector<int> v1;
  std::vector<int> v2;
  std::vector<int> v3;

  foo()
  {
    v1 = { 1,2,3 };
    v2 = { 4,5,6 };
    v3 = { 7,8,9 };
  }

  range my_range()
  {
    auto jr = boost::join(v1, v2); // (1)
    return boost::join(jr, v3);    // (2)
  }
};

int main()
{
  foo f1;
  for (auto item : f1.my_range())
    std::cout << item << " ";

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