Лямбда-выражения и управление памятью

Как выражения Lambda Express/Closures в С++ 0x усложняют управление памятью на С++? Почему некоторые люди говорят, что закрытие не имеет места на языках с ручным управлением памятью? Является ли их требование действительным и если да, в чем причины этого?

Ответ 1

Lambdas может пережить контекст, в котором они были созданы. Привязка свободных переменных по ссылке может быть проблемой, потому что, когда лямбда хочет получить к ней доступ позже, они могут больше не существовать. Это просто "Не возвращать локальные переменные по ссылке" в маскировке.

Ответ 2

Такие аргументы - красная селедка. Да, у lambdas есть проблемы с управлением памятью, но lambda в основном похожа на функциональный объект (функтор) с переменными-членами. Независимо от того, с чем должен справиться функтор, нужно иметь дело с лямбдой. У С++ 0x lambdas есть возможности для определения того, какие объекты нужно захватить, и должен ли он быть по значению или по ссылке. Это аналогично хранению значений и ссылок в объекте-функторе.

Ответ 3

Как выражения лямбда-выражения/замыкания в С++ 0x усложняют управление памятью на С++?

Они? Это просто синтаксический сахар для создания объектов функции. Мы ничего не видели раньше. Только теперь у нас есть короткий синтаксис для их создания на лету.

Почему некоторые люди говорят, что закрытие не имеет места на языках с ручным управлением памятью?

Вероятно, вы должны спросить их. Я считаю, что лямбда-подход С++ 0x довольно изящный и низкоуровневый. Он соответствует духу С++.

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

Ударь меня. Устранить некоторые аргументы?