在查看 cpp首选项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)
创建一个指向与r
相同的对象的临时weak_ptr
;
.swap(*this)
将临时实例的值与当前实例交换,使当前实例指向与r
相同的对象,使临时实例指向当前实例使用的任何对象;
;
销毁临时实例,因此现在指向当前实例过去指向的对象weak_ptr
少了一个。