Как делают Лямбда-выражения / Закрытия в C++ 0x усложняют управление памятью в C++? Почему некоторые люди говорят, что закрытия не имеют никакого места на языках с ручным управлением памятью? Действительно ли их требование действительно и если да, каковы причины позади него?
Лямбда-выражения могут пережить тот контекст, в котором они были созданы in. Привязка свободных переменных по ссылке может быть проблемой, потому что, когда лямбда захочет получить к ним доступ позже, они могут больше не существовать. Это просто замаскированный вариант «Не возвращать локальные переменные по ссылке».
Подобные аргументы - отвлекающий маневр. Да, лямбда-выражения имеют проблемы с управлением памятью, но лямбда-выражения в основном похожи на объект функции (функтор) с переменными-членами. С какими бы проблемами ни сталкивался функтор, лямбда тоже должна иметь дело. У лямбда-выражений C ++ 0x есть средства, позволяющие решать, какие объекты захватывать, и должно ли это быть по значению или по ссылке. Это аналогично хранению значений и ссылок в объекте-функторе.
Как лямбда-выражения / замыкания в C ++ 0x усложняют управление памятью в C ++?
Неужели? Они просто синтаксический сахар для создания функциональных объектов. Ничего подобного мы раньше не видели. Только теперь у нас есть короткий синтаксис для их создания «на лету».
Почему некоторые люди говорят, что замыканиям нет места в языках с ручным управлением памятью?
Вы, вероятно, должны спросить их. Я считаю лямбда-подход C ++ 0x довольно элегантным и низкоуровневым. Это соответствует духу C ++.
Правильно ли это заявление, и если да, то каковы его причины?
Превосходно. Не хотите сами найти аргументы?