Уничтожение аргументов происходит до возвращения?

ОК, у меня есть эта последовательность событий:

  1. Я строю объект r-значения
  2. Я передаю итератор к этому объекту r-значения в функцию в качестве параметра
  3. Функция работает на этом итераторе
  4. Функция возвращает этот итератор по значению
  5. Я разыменую итератор

Я не знаю, что вызывает очистку объекта r-значения, это конец этой строки?

Хорошо, теперь для конкретики, я пытаюсь придумать лучший ответ на этот вопрос: Умножение строк в C ++ И у меня есть код:

const auto bar = 13U;
const char multiplicand[] = "0, ";
const auto length = strlen(multiplicand);
const string foo(&*generate_n(string(bar * length, '\0').begin(), bar * length, [&]() {
static auto i = 0U;
return multiplicand[i++ % length];
}) - bar * length);

Поэтому я хочу знать, когда string это построено внутри generate_n должен быть уничтожен. Между прочим, похоже, что это нормально работает на GCC 5.1: http://ideone.com/Y8rDs5 Но я мог просто получить неопределенное поведение. Это подразумевается тем, что код segfaults на Visual Studio 2015.

1

Решение

Временные, такие как string(bar * length, '\0') уничтожены в конце полный выражение. Полное выражение является инициализатором const string foo, Следовательно, временная строка не будет уничтожена до ctor foo возвращается.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]