我正在尝试跟踪一个非常难以重现的错误.我有一个项目池,并使用以下内容在客户端完成后自动检查池项目:
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
被分配到签出项目的第一个池?
是的,static
函数范围变量被赋值一次,因此只有一个lambda对象,它将首先引用MyPool
具有checkOut
成员函数的对象.它可能不是你需要的,所以只需删除即可static
.