C ++: Можно ли оптимизировать неиспользуемый лямбда-явный захват?
У меня есть приличное количество кода, который опирается на захватshared_from_this()
при использовании лямбда-выражения в качестве обратного вызова, чтобы убедиться, что мой экземпляр остается в живых:
std::shared_ptr self = shared_from_this();
auto doSomething = [this, self] ()
{
// various statements, none of which reference self, but do use this
}
Итак, вопрос: так как я не ссылаюсьself
внутри лямбда-тела позволяет ли совместимый компилятор оптимизировать захват?
Рассмотрим следующую программу:
#include
#include
#include
std::function gFunc;
struct S : std::enable_shared_from_this
{
void putGlobal()
{
auto self = shared_from_this();
gFunc = [self] { };
}
};
int main()
{
auto x = std::make_shared();
std::cout < x.use_count() < std::endl;
x->putGlobal();
std::cout < x.use_count() < std::endl;
}