【发布时间】:2016-09-23 14:19:36
【问题描述】:
取消引用weak_ptr 不会自动检查指针是否已过期。为什么要这样设计?
我想安全地取消引用弱指针,而不必先使用expired() 检查它们,如果它们为空则抛出异常。
这是一个好的做法吗?什么是正确的做法?我是否应该重载 * 和 -> 运算符以便他们首先执行此检查?我应该写一个免费的函数吗?
类似:
template< typename T >
weak_ptr< T > & check( weak_ptr< T > & p )
{
if( p.expired() )
throw logic_error( "Trying to dereference a null pointer." );
return p;
}
然后:
weak_ptr< int > pi;
int i = *check( pi );
谢谢。
【问题讨论】:
-
但是...你不能取消引用弱指针。你必须锁定它,从中获取一个共享的并使用它。
-
您应该在访问原始指针之前从它们转换/创建一个 shared_ptr 以避免竞争条件。
标签: c++ pointers exception weak-ptr