public member function
<memory>

std::weak_ptr::operator=

copy (1)
weak_ptr& operator= (const weak_ptr& x) noexcept;template <class U> weak_ptr& operator= (const weak_ptr<U>& x) noexcept;
from shared_ptr (2)
template <class U> weak_ptr& operator= (const shared_ptr<U>& x) noexcept;
copy (1)
weak_ptr& operator= (const weak_ptr& x) noexcept;template <class U> weak_ptr& operator= (const weak_ptr<U>& x) noexcept;
from shared_ptr (2)
template <class U> weak_ptr& operator= (const shared_ptr<U>& x) noexcept;
移动 (3)
weak_ptr& operator= (weak_ptr&& x) noexcept;template <class U> weak_ptr& operator= (weak_ptr<U>&& x) noexcept;
weak_ptr assignment
该对象成为x拥有组的一部分,从而在不拥有所有权(也不增加其use count)的情况下,提供对该对象资产的访问,直到expired

如果x为空,则构造的weak_ptr也为空。

如果x是别名,则weak_ptr会保留拥有的数据存储的指针

可以直接将shared_ptr对象赋值给weak_ptr对象,但为了将weak_ptr对象赋值给shared_ptr,应使用成员函数lock

参数

x
weak_ptrshared_ptr类型的对象。
U*应可隐式转换为T*(其中Tshared_ptr的模板参数)。

返回值

*this

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// weak_ptr::operator= example
#include <iostream>
#include <memory>

int main () {
  std::shared_ptr<int> sp1,sp2;
  std::weak_ptr<int> wp;
                                       // sharing group:
                                       // --------------
  sp1 = std::make_shared<int> (10);    // sp1
  wp = sp1;                            // sp1, wp

  sp2 = wp.lock();                     // sp1, wp, sp2
  sp1.reset();                         //      wp, sp2

  sp1 = wp.lock();                     // sp1, wp, sp2

  std::cout << "*sp1: " << *sp1 << '\n';
  std::cout << "*sp2: " << *sp2 << '\n';

  return 0;
}

输出
*sp1: 10
*sp2: 10


另见