weak_ptr 是否总是在 shared_ptr 重置后过期?
Does weak_ptr is always expired after shared_ptr reset?
我找到了类似的 question 但我的示例略有不同。
这是一个非常简单的例子:
int main()
{
auto sp = std::make_shared<T>();
std::weak_ptr<T> wp = sp;
sp.reset();
assert(wp.expired());
}
是否保证在上述情况下 weak_ptr 在 shared_ptr 重置后总是过期?
是的,expired()
等同于 use_count()==0
。 use_count()
定义为返回共享托管对象的 shared_ptr
个实例的数量。一旦你调用 sp.reset()
,那个数字就是零。
是的,这是有保证的。打电话
sp.reset();
相当于
shared_ptr().swap(*this)
这意味着sp
现在回到了默认构造状态。如果我们查看标准中的 use_count
,我们有
Returns: the number of shared_ptr
objects, *this
included, that share ownership with *this
, or 0
when *this
is empty.
并且因为它是空的,所以 use_count
是 0
并且 expried
和 expried
一样
Checks whether the managed object has already been deleted. Equivalent to use_count() == 0
.
我找到了类似的 question 但我的示例略有不同。
这是一个非常简单的例子:
int main()
{
auto sp = std::make_shared<T>();
std::weak_ptr<T> wp = sp;
sp.reset();
assert(wp.expired());
}
是否保证在上述情况下 weak_ptr 在 shared_ptr 重置后总是过期?
是的,expired()
等同于 use_count()==0
。 use_count()
定义为返回共享托管对象的 shared_ptr
个实例的数量。一旦你调用 sp.reset()
,那个数字就是零。
是的,这是有保证的。打电话
sp.reset();
相当于
shared_ptr().swap(*this)
这意味着sp
现在回到了默认构造状态。如果我们查看标准中的 use_count
,我们有
Returns: the number of
shared_ptr
objects,*this
included, that share ownership with*this
, or0
when*this
is empty.
并且因为它是空的,所以 use_count
是 0
并且 expried
和 expried
Checks whether the managed object has already been deleted. Equivalent to
use_count() == 0
.