[英]std::weak_ptr::operator= confusion
在cppreference上查看std::weak_ptr::operator=
时 ,我意识到我不明白重载(1-3)的解释是什么意思。 就是说
template< class Y >
weak_ptr& operator=( const shared_ptr<Y>& r ) noexcept;
等价于
std::weak_ptr<T>(r).swap(*this)
怎么可能? std::weak_ptr<T>(r)
是否不是右值(临时值) .swap(*this)
引用其实例,即与自身交换? 我以为应该是
std::weak_ptr<T>().swap(r)
这到底是怎么回事?
std::weak_ptr<T>(r)
创建一个临时的weak_ptr
,它指向与r
相同的对象;
.swap(*this)
与当前实例交换临时变量的值,使当前实例指向与r
相同的对象,并使临时实例指向当前实例过去使用的对象;
;
销毁临时对象,因此现在少了一个指向当前实例所指向的对象的weak_ptr
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.