Как выражения Lambda Express/Closures в С++ 0x усложняют управление памятью на С++? Почему некоторые люди говорят, что закрытие не имеет места на языках с ручным управлением памятью? Является ли их требование действительным и если да, в чем причины этого?
Лямбда-выражения и управление памятью
Ответ 1
Lambdas может пережить контекст, в котором они были созданы. Привязка свободных переменных по ссылке может быть проблемой, потому что, когда лямбда хочет получить к ней доступ позже, они могут больше не существовать. Это просто "Не возвращать локальные переменные по ссылке" в маскировке.
Ответ 2
Такие аргументы - красная селедка. Да, у lambdas есть проблемы с управлением памятью, но lambda в основном похожа на функциональный объект (функтор) с переменными-членами. Независимо от того, с чем должен справиться функтор, нужно иметь дело с лямбдой. У С++ 0x lambdas есть возможности для определения того, какие объекты нужно захватить, и должен ли он быть по значению или по ссылке. Это аналогично хранению значений и ссылок в объекте-функторе.
Ответ 3
Как выражения лямбда-выражения/замыкания в С++ 0x усложняют управление памятью на С++?
Они? Это просто синтаксический сахар для создания объектов функции. Мы ничего не видели раньше. Только теперь у нас есть короткий синтаксис для их создания на лету.
Почему некоторые люди говорят, что закрытие не имеет места на языках с ручным управлением памятью?
Вероятно, вы должны спросить их. Я считаю, что лямбда-подход С++ 0x довольно изящный и низкоуровневый. Он соответствует духу С++.
Есть ли заявка действительная, и если да, в чем причины этого?
Ударь меня. Устранить некоторые аргументы?