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

typedef std::shared_ptr<T> Handle;

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

    return Handle(item, CheckInDeleter);
}

我的问题是这不安全吗? this 会分配给第一个 check out 项目的池吗?

最佳答案

是的,static 函数作用域变量被分配一次,所以只有一个 lambda 对象,它将引用第一个 MyPool 调用了 checkOut 成员函数。它可能不是你需要的,所以只需删除 static

关于c++11 - 静态 lambdas 是否有任何用途/不明智?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23408229/

10-15 00:32