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