繁体   English   中英

std :: weak_ptr :: operator =混乱

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM