Ограничения JavaScript в Oracle BPEL

Конечно, выделение auto f = new std::function; в порядке. Определение лямбда *f = [f]() { delete f; }; также работает, поскольку оно еще не выполнено.

Теперь интересно (*f)();. Сначала это разметки f, затем вызывает operator() и, наконец, выполняет delete f. Вызов delete f в функции члена класса function<>::operator() совпадает с вызовом delete this. При определенных условиях это законно.

Так что это зависит от того, как реализовано operator() для std::function и lamdabs. Ваш код будет действителен, если будет гарантировано, что никакая функция-член, переменная-член или этот указатель не будет использоваться или даже не затронут operator() после выполнения вашей инкапсулированной лямбда.

Я бы сказал, что нет необходимости для std::function вызывать другие функции-члены или использовать переменные-члены в operator() после выполнения вашей лямбда. Таким образом, вы, вероятно, найдете реализации, для которых ваш код является законным, но в целом, вероятно, это небезопасно.

0
задан Marcello Marinho Ribeiro 16 January 2019 в 17:56
поделиться

1 ответ

Это была моя ошибка ... На самом деле, вам нужно полное изложение даты [ГГГГ-ММ-ДДЧЧ: ММ: СС.МММЗ] Спасибо.

0
ответ дан Marcello Marinho Ribeiro 16 January 2019 в 17:56
поделиться
Другие вопросы по тегам:

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