Можно ли определить, есть ли у лямбды «this» в группе захвата? - PullRequest
2 голосов
/ 09 июля 2020

Можно ли в c ++ 17 выполнять метапрограммирование шаблонов, чтобы каким-то образом определить, было ли «this» частью группы захвата? Или во время выполнения?

У меня есть класс A, который принимает лямбда для последующего вызова. Однако, если объект B, владеющий A, улавливает «this» в лямбде, который он дает A, это может вызвать тонкое использование после освобождения. Возможность взломать sh в этом сценарии была бы полезной.

Я знаю, что их не будет 100% (например, пользователь может записать это как «a = this» или «b = (void *)этот"). Я также не ожидаю, что смогу зафиксировать все проблемы (например, если я зафиксирую ссылку на переменную-член). Я просто хочу добавить уверенности в заведомо неправильном сценарии ios

1 Ответ

7 голосов
/ 09 июля 2020

Лямбда - это не более , чем класс, сгенерированный компилятором с перегруженным operator(). В программировании шаблонов нет механизма, который мог бы (кросс-платформенный) определить, был ли конкретный тип сгенерирован компилятором, не говоря уже о самоанализе «членов» этого класса, чтобы выяснить, что он захватил и как.

Вам просто нужно ожидать, что пользователи вашей системы будут соблюдать надлежащую дисциплину.

...