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

Jam*_*mes 3 lambda c++11

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

typedef std::shared_ptr<T> Handle;

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

    return Handle(item, CheckInDeleter);
}
Run Code Online (Sandbox Code Playgroud)

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

zch*_*zch 5

是的,static函数范围变量被赋值一次,因此只有一个lambda对象,它将首先引用MyPool具有checkOut成员函数的对象.它可能不是你需要的,所以只需删除即可static.