簡體   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