跳到主要内容

std::weak_ptr<T>::operator=

// 1)
weak_ptr& operator=( const weak_ptr& r ) noexcept;
// 2)
template< class Y >
weak_ptr& operator=( const weak_ptr<Y>& r ) noexcept;
// 3)
template< class Y >
weak_ptr& operator=( const shared_ptr<Y>& r ) noexcept;
// 4)
weak_ptr& operator=( weak_ptr&& r ) noexcept;
// 5)
template< class Y >
weak_ptr& operator=( weak_ptr<Y>&& r ) noexcept;

r 所管理的那个对象替换当前对象。该对象与 r 共享。如果 r 未管理任何对象,则 *this 也未管理任何对象。

1-3) 等价于 std::weak_ptr<T>(r).swap(*this)。 4,5) 等价于 std::weak_ptr<T>(std::move(r)).swap(*this)

参数

r - 用于共享对象的智能指针

返回值

*this

备注

实现可以在不创建临时 weak_ptr 对象的情况下满足要求。

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

缺陷报告应用于发布时的行为正确行为
以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。C++11weak_ptr 未启用移动语义已启用

std::weak_ptr<T>::operator=

// 1)
weak_ptr& operator=( const weak_ptr& r ) noexcept;
// 2)
template< class Y >
weak_ptr& operator=( const weak_ptr<Y>& r ) noexcept;
// 3)
template< class Y >
weak_ptr& operator=( const shared_ptr<Y>& r ) noexcept;
// 4)
weak_ptr& operator=( weak_ptr&& r ) noexcept;
// 5)
template< class Y >
weak_ptr& operator=( weak_ptr<Y>&& r ) noexcept;

r 所管理的那个对象替换当前对象。该对象与 r 共享。如果 r 未管理任何对象,则 *this 也未管理任何对象。

1-3) 等价于 std::weak_ptr<T>(r).swap(*this)。 4,5) 等价于 std::weak_ptr<T>(std::move(r)).swap(*this)

参数

r - 用于共享对象的智能指针

返回值

*this

备注

实现可以在不创建临时 weak_ptr 对象的情况下满足要求。

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

缺陷报告应用于发布时的行为正确行为
以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。C++11weak_ptr 未启用移动语义已启用