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

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

10
задан sellibitze 23 May 2010 в 14:03
поделиться

3 ответа

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

10
ответ дан 3 December 2019 в 15:51
поделиться

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

15
ответ дан 3 December 2019 в 15:51
поделиться

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

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

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

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

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

Превосходно. Не хотите сами найти аргументы?

2
ответ дан 3 December 2019 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: