Лямбда-выражения и управление памятью - PullRequest
10 голосов
/ 22 мая 2010

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

Ответы [ 3 ]

15 голосов
/ 22 мая 2010

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

10 голосов
/ 22 мая 2010

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

2 голосов
/ 22 мая 2010

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

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

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

Вы, вероятно, должны спросить их. Я нахожу C ++ 0x лямбда-подход довольно элегантным и низкоуровневым. Это соответствует духу C ++.

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

Бьет меня. Не хочешь сами найти аргументы?

...