我正在尝试跟踪一个非常难以重现的错误。我有一个项目池,并使用以下内容在客户端完成后自动检查池项目:
typedef std::shared_ptr<T> Handle;
Handle MyPool::checkOut()
{
static const auto CheckInDeleter = [this](T* item)
{
this->checkIn(item);
};
return Handle(item, CheckInDeleter);
}
我的问题是这不安全吗?将this
分配给签出项目的第一个池吗?
答案 0 :(得分:5)
是的,static
函数范围变量被赋值一次,因此只有一个lambda对象,它将引用名为MyPool
成员函数的第一个checkOut
。这可能不是您所需要的,所以只需删除static
。