std::weak_ptr::运算符=混淆



在查看 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少了一个。

相关内容

  • 没有找到相关文章

最新更新