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