Кадр сопрограммы автоматически уничтожается и освобождается (т.е. освобождается выделенный кадр?) после co_return?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Кадр сопрограммы автоматически уничтожается и освобождается (т.е. освобождается выделенный кадр?) после co_return?

Сообщение Anonymous »

Я знаю, что если будет достигнут co_return (явный или неявный)

Код: Выделить всё

co_await promise.final_suspend()
вызывается.
В Final_suspend() можно определенно вызвать ``handle.destroy(), который, насколько я понимаю, уничтожает все объекты в кадре сопрограммы (CF), наконец, вызывает ~promise_type (), то он освобождает выделенный CF. См. ниже Льюис Бейкер рекомендует это.
Однако:
  • Если Final_suspend() делает это не вызывать handle.destroy() или возвращает std::suspend_never или , будет ли CF правильно уничтожен сразу после

    Код: Выделить всё

    co_await promise.final_suspend()
    завершается?
  • Что произойдет, если Final_suspend() вернет std::suspend_always? p>

    Освобождение CF каким-то образом связано с деструктором, выведенным компилятором ~promise_type() ?
*Льюис Бейкер рекомендует это здесь:

Обратите внимание, что, хотя это разрешено сопрограмма не приостанавливается в точке Final_suspend, рекомендуется структурировать свои сопрограммы так, чтобы они приостанавливались в точке Final_suspend, где это возможно. Это связано с тем, что это заставляет вас вызывать .destroy() в сопрограмме из-за пределов сопрограммы (обычно из какого-либо деструктора объекта RAII), и это значительно упрощает компилятору определение того, когда истекает время жизни сопрограммы. кадр сопрограммы вложен в вызывающую программу. Это, в свою очередь, значительно повышает вероятность того, что компилятор сможет обойти выделение памяти для кадра сопрограммы.

Кроме того, прочитав комментарии к этому блогу ниже[1], я задался вопросом, гарантирует ли использование std::suspend_never отсутствие утечек.
1

Подробнее здесь: https://stackoverflow.com/questions/784 ... ame-is-fre
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»