我找到了类似的question,但我的例子略有不同。
这是一个非常简单的例子:
int main()
{
auto sp = std::make_shared<T>();
std::weak_ptr<T> wp = sp;
sp.reset();
assert(wp.expired());
}
是否可以保证在上述情况下,在shared_ptr重置后,weak_ptr总是过期?
答案 0 :(得分:4)
是的,这是有保证的。调用
sp.reset();
相当于
shared_ptr().swap(*this)
这意味着sp
现在回到默认构造状态。如果我们在标准中查看use_count
返回:
shared_ptr
对象的数量,*this
包含的内容,与*this
共享所有权,或0
*this
} 为空。
由于它为空,use_count
为0
而expried
为真expried
检查托管对象是否已被删除。相当于
use_count() == 0
。
答案 1 :(得分:3)
是的,expired()
相当于use_count()==0
。 use_count()
定义为返回共享托管对象的shared_ptr
个实例的数量。致电sp.reset()
后该号码为零。