静态lambda是任何使用/不明智?

时间:2014-05-01 13:01:25

标签: c++11 lambda

我正在尝试跟踪一个非常难以重现的错误。我有一个项目池,并使用以下内容在客户端完成后自动检查池项目:

typedef std::shared_ptr<T> Handle;

Handle MyPool::checkOut()
{
    static const auto CheckInDeleter = [this](T* item)
    {
        this->checkIn(item);
    };

    return Handle(item, CheckInDeleter);
}

我的问题是这不安全吗?将this分配给签出项目的第一个池吗?

1 个答案:

答案 0 :(得分:5)

是的,static函数范围变量被赋值一次,因此只有一个lambda对象,它将引用名为MyPool成员函数的第一个checkOut。这可能不是您所需要的,所以只需删除static