我有一个指向用new创建的对象的指针向量。多个线程使用各种获取/设置以安全的方式访问此向量。但是,一个线程可能会删除其中一个对象,在这种情况下,另一个线程指向该对象的指针不再有效。方法如何知道指针是否有效?选项 1 和 2 实际上似乎运作良好。我不知道他们将如何扩展。最好的方法是什么?有便携版3吗?
测试有效的指针有效性示例:
1.使用整数而不是指针。哈希 (std::map) 检查指针是否仍然有效。公共方法如下所示:
get(size_t iKey)
{
if((it = mMap.find(iKey)) != mMap.end())
{
TMyType * pMyType = it->second;
// do something with pMyType
}
}
2.有一个shared_ptr的向量。每个线程都尝试在其weak_ptr上调用 lock() 。如果返回的 shared_ptr 为 null,我们知道有人在我们等待时删除了它。公共方法如下所示:
get(boost::weak_ptr<TMyType> pMyType)
{
boost::shared_ptr<TMyType> pGOOD = pMyType.lock();
if (pGOOD != NULL)
{
// Do something with pGOOD
}
}
3.在纯原始指针上测试 null 吗?这可能吗?
get(TMyType * pMyType)
{
if(pMyType != NULL){ //do something }
}