命名空间
变体
操作

std::shared_ptr<T>::operator=

来自 cppreference.com
< cpp‎ | memory‎ | shared ptr
 
 
实用程序库
语言支持
类型支持 (基本类型, RTTI)
库特性测试宏 (C++20)
动态内存管理
程序实用程序
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三元比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用程序
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
动态内存管理
未初始化内存算法
受约束的未初始化内存算法
分配器
垃圾回收支持
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)



 
 
shared_ptr& operator=( const shared_ptr& r ) noexcept;
(1)
template< class Y >
shared_ptr& operator=( const shared_ptr<Y>& r ) noexcept;
(2)
shared_ptr& operator=( shared_ptr&& r ) noexcept;
(3)
template< class Y >
shared_ptr& operator=( shared_ptr<Y>&& r ) noexcept;
(4)
template< class Y >
shared_ptr& operator=( std::auto_ptr<Y>&& r );
(5) (C++11 中已弃用)
(C++17 中已移除)
template< class Y, class Deleter >
shared_ptr& operator=( std::unique_ptr<Y, Deleter>&& r );
(6)

将托管对象替换为 r 所托管的对象。

如果 *this 已经拥有一个对象,并且它是最后一个拥有该对象的 shared_ptr,而 r*this 不相同,则该对象将通过其拥有的删除器销毁。

1,2) 共享 r 所托管的对象的所有权。如果 r 不管理任何对象,则 *this 也不管理任何对象。等效于 shared_ptr<T>(r).swap(*this).
3,4) 将一个 shared_ptrr 移动赋值给它。赋值后,*this 包含 r 之前的状态的副本,而 r 则为空。等同于 shared_ptr<T>(std::move(r)).swap(*this).
5)r 管理的对象的所有权转移到 *this。如果 r 不管理任何对象,那么 *this 也不管理任何对象。赋值后,*this 包含之前由 r 持有的指针,并且 use_count() == 1;此外,r 也是空的。等同于 shared_ptr<T>(r).swap(*this).
6)r 管理的对象的所有权转移到 *this。与 r 关联的删除器被存储起来,用于将来删除被管理的对象。调用后,r 不再管理任何对象。等同于 shared_ptr<T>(std::move(r)).swap(*this).

内容

[编辑] 参数

r - 另一个智能指针,用于共享所有权或获取所有权

[编辑] 返回值

*this

[编辑] 备注

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

[编辑] 异常

5,6) 可能抛出实现定义的异常。

[编辑] 示例

[编辑] 参见

替换被管理的对象
(公有成员函数) [编辑]